我有一个由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>
如何为INVOICE节点选择不同的标头?
我在我的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?>
标题永远不会改变。
请帮助我。
答案 0 :(得分:1)
要控制标题,请使用@section命令和全局变量。试试这个。
将此代码放入正文中。
OpenSessionInViewFilter
现在将其放入标题:<?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?>
BIP首先用@section拆分数据集,并打印变量&#39; HEADER&#39;对于所有页面,直到达到下一个分割。
答案 1 :(得分:0)
这种方法适用于所提出的问题。
但我忽略了提到我需要在标题中包含数据集中的值,而不仅仅是静态文本。使用@section可以防止这种情况,因为for-each之外的所有值都被重置,因此在标题中是空白的。
我将此标记为原始提出的问题已解决。