【问题标题】:XSL BI Publisher For-Each Loop print blank linesXSL BI Publisher For-Each 循环打印空行
【发布时间】:2018-12-18 14:54:33
【问题描述】:

我的 BI Publisher RTF 模板中有一个 for-each 循环,用于在 XML 输出中重复组。当没有数据存在时,我仍然需要 for-each 循环来输出一个空白表行。有点像 for-each 循环的例外。有可能吗?

XML 输出:

<LIST_G_BOX_18_TO_20> 
 <G_BOX_18_TO_20>
  <SD_CODE></SD_CODE>
  <ASSIGNMENT_ACTION_ID5>2090950796</ASSIGNMENT_ACTION_ID5>
  <PAYROLL_ACTION_ID5>30381586</PAYROLL_ACTION_ID5>
  <TAX_UNIT_ID4>120</TAX_UNIT_ID4>
  <LOCALITY_NAME1>Euclid(OH)</LOCALITY_NAME1>
  <STATE_ABBREV>OH</STATE_ABBREV>
  <W2_LOCAL_WAGES>34.43</W2_LOCAL_WAGES>
  <W2_LOCAL_INCOME_TAX>.98</W2_LOCAL_INCOME_TAX>
 </G_BOX_18_TO_20>
<LIST_G_BOX_18_TO_20> 

FOR-EACH 循环

<?for-each:G_BOX_18_TO_20[W2_LOCAL_WAGES>0]?>
   <?if:position()!=1?><?STATE_ABBREV?>
  <?W2_LOCAL_WAGES?>
  <?W2_LOCAL_INCOME_TAX?>
  <?    xdofx:substr(LOCALITY_NAME1,1,decode(instr(LOCALITY_NAME1,'(',1),'0',length(LOCALITY_NAME1)+1,instr(LOCALITY_NAME1, '(', 1)) - 1)?>
 <?end if?>
 <?end for-each?>

元素不存在数据时的 XML 输出示例 - G_BOX_18_TO_20:

<LIST_G_BOX_18_TO_20>
</LIST_G_BOX_18_TO_20>

【问题讨论】:

  • 答案是肯定的!但是要给出一个具体的答案,您能否展示输入 XML(带组)和当前 XSLT 的示例,以及在没有数据时您期望的输出。谢谢!
  • 您能否编辑您的问题以显示您的 XML(和 XSLT),因为代码在 cmets 中难以阅读。谢谢!
  • 我已经添加了 XML 输出和 for-each 循环代码
  • 你能举一个不存在数据的记录的例子吗?

标签: xml xslt foreach rtf bi-publisher


【解决方案1】:

选项 1

在您的循环中添加第二行到您的表之前。将这些条件之一应用于该新行,使其在满足条件时出现。

条件A:检查LIST元素中是否没有记录

<?if:LIST_G_BOX_18_TO_20 and LIST_G_BOX_18_TO_20="?><?end if?> 

条件 B:检查 LIST ITEM 元素是否不存在

<?if:not(G_BOX_18_TO_20)?><?end if?>

选项 2

这在了解一些其他详细信息之前适用,因此对其他人了解可能会有所帮助。从 for-each 中取出条件,在不满足条件时不希望出现的所有字段上使其成为 if 语句。

<?for-each:G_BOX_18_TO_20?>
   <?if:position()!=1?><?STATE_ABBREV?>
  <?if:W2_LOCAL_WAGES>0?><?W2_LOCAL_WAGES?><?end if?>
  <?if:W2_LOCAL_WAGES>0?><?W2_LOCAL_INCOME_TAX?><?end if?>
  <?if:W2_LOCAL_WAGES>0?><?xdofx:substr(LOCALITY_NAME1,1,decode(instr(LOCALITY_NAME1,'(',1),'0',length(LOCALITY_NAME1)+1,instr(LOCALITY_NAME1, '(', 1)) - 1)?><?end if?>
 <?end if?>
<?end for-each?>

【讨论】:

  • 似乎不起作用。我添加了一个示例输出,其中没有 G_BOX_18_TO_20 的数据/元素
  • 更新后更新。了解列表元素至关重要。我更新了您的原始问题以包含该问题。
  • 附加行似乎确实有效。这是我修改后的 IF 条件:0]) = 1 或 count(G_BOX_18_TO_20[W2_LOCAL_WAGES>0]) = 0?>。确保您的 IF 和 End If 不在表格行的同一单元格中。当没有 G_BOX_18_TO_20 的数据时,我需要打印这一空行,并且如果恰好存在一个 G_BOX_18_TO_20[W2_LOCAL_WAGES>0] 实例,因为需要在上面的行中打印该实例。我正在使用 [W2_LOCAL_WAGES>0] 以忽略 W2_LOCAL_WAGES = 0 的组。
  • 您还可以使用 position() 对您的 for-each 循环结果进行排名。示例: 做某事
猜你喜欢
  • 2012-10-11
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多