我正在尝试创建Oracle BI Publisher报告(使用Microsoft Word插件)。该报告是从PeopleSoft创建的XML文件创建的。 XML文件包含许多行(我已经包含了一些示例数据)。一行包含员工数据,下一行包含受益人数据。在XML文件中,似乎每个奇数行是员工数据,每个偶数行是受益数据。在构建报告时,我需要做的是显示受益人行中的所有必要数据,并仅显示员工行中的金额(A. CALCULATED_BASE)。这应该显示为一个输出块,而不是两个。
我可以让我的报告显示来自员工行或受益人行或两行的数据,但我无法弄清楚如何向受益人显示所有必要的数据'数据,只有员工数据中的金额。
我不确定这是否是解决此问题的最佳方式,但我一直试图弄清楚如何使用"前兄弟"从员工行获取A.CALCULATED_BASE。这就是我的想法:我会读取受益人数据,然后查看其他行并编写A.PLAN_TYPE。如果受益人行的A.PLAN_TYPE等于员工行中的A.PLAN_TYPE,则获取A.CALCULATED_BASE。确定一行是针对员工还是受益人的方法是查看A.RELATIONSHIP。 A.RELATIONSHIP对于员工来说总是空的,但包含受益人的数据。
示例XML数据:
<?xml version='1.0'?>
<query numrows="10" queryname="query_name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="">
<row rownumber="1"> <!-- Employee -->
<A.PLAN_TYPE><![CDATA[10]]></A.PLAN_TYPE>
<A.NAME><![CDATA[Firstname Lastname]]></A.NAME>
<A.RELATIONSHIP><![CDATA[]]></A.RELATIONSHIP>
<A.CALCULATED_BASE>10000</A.CALCULATED_BASE>
<A.CONTINGENT><![CDATA[N]]></A.CONTINGENT>
</row>
<row rownumber="2"> <!-- Beneficiary -->
<A.PLAN_TYPE><![CDATA[10]]></A.PLAN_TYPE>
<A.NAME><![CDATA[Firstname Lastname]]></A.NAME>
<A.RELATIONSHIP><![CDATA[Spouse]]></A.RELATIONSHIP>
<A.CALCULATED_BASE>0</A.CALCULATED_BASE>
<A.CONTINGENT><![CDATA[N]]></A.CONTINGENT>
</row>
</query>
在下面的例子中:
输出示例:
Employee's Name and other information goes here.
Life Insurance Amount: $10000.00
Beneficiary Beneficiary Status
Beneficiary Name Primary
感谢您的帮助。
答案 0 :(得分:0)
每个奇数行都是员工数据,每个偶数行都是 受益人数据。在构建报告时,我需要做的是显示 受益人行中的所有必要数据和仅金额(A。 来自员工行的CALCULATED_BASE。
这是一个简化示例,显示了您需要采取的基本方法:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/query">
<root>
<!-- for every even row -->
<xsl:for-each select="row[position() mod 2 = 0]">
<record>
<!-- get beneficiary data -->
<name>
<xsl:value-of select="A.NAME" />
</name>
<relationship>
<xsl:value-of select="A.RELATIONSHIP" />
</relationship>
<!-- get employee data -->
<base>
<xsl:value-of select="preceding-sibling::row/A.CALCULATED_BASE" />
</base>
</record>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
应用于您的输入示例,结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<record>
<name>Firstname Lastname</name>
<relationship>Spouse</relationship>
<base>10000</base>
</record>
</root>
答案 1 :(得分:0)
再次感谢您的反馈。