网站新手和xsl所以请耐心等待。不确定这篇文章将如何发布,我可能需要上传实际的XML / XSL。
我有一个包含两个基本组的XML。 1表示气体,1表示电气。它的设置如下:
<TS_810>
<Group_6>
<IT1>
<IT107>ELECTRIC</IT107>
</IT1>
<GROUP_9>
+<SLN>
<SAC>
<SAC01>DETAILS</SAC01>
<SAC02>DETAILS2</SAC02>
</SAC>
</GROUP_9>
<GROUP_9>
+<SLN>
<SAC>
<SAC01>DETAILS</SAC01>
<SAC02>DETAILS2</SAC02>
</SAC>
</GROUP_9>
</GROUP_6>
<Group_6>
<IT1>
<IT107>GAS</IT107>
</IT1>
<GROUP_9>
+<SLN>
<SAC>
<SAC01>DETAILS</SAC01>
<SAC02>DETAILS2</SAC02>
</SAC>
</GROUP_9>
<GROUP_9>
+<SLN>
<SAC>
<SAC01>DETAILS</SAC01>
<SAC02>DETAILS2</SAC02>
</SAC>
</GROUP_9>
</GROUP_6>
我正在尝试在GROUP_6中识别Electric的IT107部分,然后为其选择每个GROUP_9细节线。完成后,我想在下一个GROUP_6中为Gas选择IT107部分,然后选择其相关GROUP_9部分中的所有细节线。
我所拥有的xsl代码正在执行以下操作。请注意,它不是所有代码,只是选择/何时/为每个部分。
<xsl: choose>
<xsl:when tes="GROUP_6/IT1/IT107 = 'ELECTRIC'">
<xsl:for-each select="GROUP_6/GROUP_9/SAC">
<fo:table-row>
<xsl:value-of select="SAC01"/>
</fo:table-row>
发生的事情是我获得了Electric的详细信息,但我也得到了气体部分Group_6 / Group_9的详细信息。选择组循环似乎不仅仅选择GROUP_6电气部分。
有没有办法只为ELECTRIC选择Group_6 / Group_9线?然后我将创建另一个选择为GAS选择Group_6 / Group_9行。
或者有没有办法在选择SAC01细节之前回顾IT107部分的价值?
有什么想法?有道理吗?
答案 0 :(得分:0)
当你测试Group_6是否包含'Electric'时,它总会返回true,因为至少有一个Group_6中有'Electric'。
然后你的循环来得太晚了。一个好的解决方案是放弃时间并使用以下每个:
<xsl:for-each select="GROUP_6[IT1/IT107 = 'ELECTRIC']/GROUP_9/SAC">
此循环将输入所有具有'ELECTRIC'的GROUP_6。使用方括号,您可以在其中发布条件(正确的术语是predicates)
这里是我的input.xml和test.xslt:
<TS_810>
<Group_6>
<IT1>
<IT107>ELECTRIC</IT107>
</IT1>
<GROUP_9>
<SAC>
<SAC01>DETAILS</SAC01>
<SAC02>DETAILS2</SAC02>
</SAC>
</GROUP_9>
<GROUP_9>
<SAC>
<SAC01>DETAILS</SAC01>
<SAC02>DETAILS2</SAC02>
</SAC>
</GROUP_9>
</Group_6>
<Group_6>
<IT1>
<IT107>GAS</IT107>
</IT1>
<GROUP_9>
<SAC>
<SAC01>DETAILS</SAC01>
<SAC02>DETAILS2</SAC02>
</SAC>
</GROUP_9>
<GROUP_9>
<SAC>
<SAC01>DETAILS</SAC01>
<SAC02>DETAILS2</SAC02>
</SAC>
</GROUP_9>
</Group_6>
</TS_810>
样式表:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/TS_810">
<root>
<xsl:for-each select="Group_6[IT1/IT107 = 'ELECTRIC']/GROUP_9/SAC">
<SAC><xsl:value-of select="'Electric SAC'"/></SAC>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
给你那个输出(只有两个来自Electric):
<root>
<SAC>Electric SAC</SAC>
<SAC>Electric SAC</SAC>
</root>