在 BI Publisher 模板中动态更改 headers

Dynamically change headers in BI Publisher Template

我有一个由 BI Publisher 生成的 XML 数据集,其中包含两个组

输入XML:

<DS>
    <G_1>
        <TASK_NAME>IMPORTANT TASK</TASK_NAME>
        <PROJECT_DESCRIPTION>ACTIVATION</PROJECT_DESCRIPTION>
        <CS_SUM_TASK_COST>100.03</CS_SUM_TASK_COST>
        <CS_SUM_TASK_FUNDING>2000</CS_SUM_TASK_FUNDING>
    </G_1>

    <G_1>
        <TASK_NAME>IMPORTANT TASK</TASK_NAME>
        <PROJECT_DESCRIPTION>DEACTIVATION</PROJECT_DESCRIPTION>
        <CS_SUM_TASK_COST>50.00</CS_SUM_TASK_COST>
        <CS_SUM_TASK_FUNDING>5000</CS_SUM_TASK_FUNDING>
    </G_1>
    .
    .

    <G_2>
        <INVOICE_NUMBER>7000006861</INVOICE_NUMBER>
        <INVOICE_DATE>2004-03-26T07:23:49.000-05:00</INVOICE_DATE>
        <INV_AMOUNT>5.01</INV_AMOUNT>
    </G_2>
    <G_2>
        <INVOICE_NUMBER>7000006862</INVOICE_NUMBER>
        <INVOICE_DATE>2004-03-26T07:23:49.000-05:00</INVOICE_DATE>
        <INV_AMOUNT>10.01</INV_AMOUNT>
    </G_2>
    .
    .
</DS>

如何 select 为 INVOICE 节点设置不同的 header?

我在我的 RTF 文档中尝试了以下方法

<?choose:?>
<?when://G_2[contains(local-name(), 'INVOICE')]?>
HEADER 1
<?end when?>

<?otherwise?>
HEADER 2
<?end otherwise?>
<?end choose?> 

<?body:begin?>
for each processing of G_1 nodes

<<I Want to start using the second header here>>

for each processing of G_2 nodes
<?body end?>

header 永远不会改变。

请帮助我。

要控制header,请使用@section 命令和一个全局变量。尝试这个。

将此代码放入 body。

<?for-each@section:G_1?>
<?xdoxslt:set_variable($_XDOCTX, 'HEADER', 'INVOICE')?>
<?end for-each?>
<?for-each@section:G_2?>
<?xdoxslt:set_variable($_XDOCTX, 'HEADER', 'OTHER')?>
<?end for-each?>

现在将其放入 header:<?xdoxslt:get_variable($_XDOCTX, 'HEADER')?>

BIP 首先用@section 拆分数据集,并为所有页面打印变量'HEADER',直到到达下一个拆分。

这种方法适用于提出的问题。

但我没有提到我需要在 header 中包含数据集中的值,而不仅仅是静态文本。使用 @section 可以防止这种情况,因为 for-each 之外的所有值都被重置,因此 header.

中的所有值都是空白的

我将此标记为已解决最初提出的问题。