我有XML文件,看起来像" ROL"节点可以是0到n
<Message>
<ROL>
<ROL.1>
<ROL.1.1>1</ROL.1.1>
</ROL.1>
<ROL.2>
<ROL.2.1>AD</ROL.2.1>
</ROL.2>
<ROL.3>
<ROL.3.1>FH</ROL.3.1>
</ROL.3>
<ROL.4>
<ROL.4.1>A</ROL.4.1>
<ROL.4.2>B</ROL.4.2>
<ROL.4.3>C</ROL.4.3>
<ROL.4.4>D</ROL.4.4>
</ROL>
<ROL>
<ROL.1>
<ROL.1.1>1</ROL.1.1>
</ROL.1>
<ROL.2>
<ROL.2.1>AD</ROL.2.1>
</ROL.2>
<ROL.3>
<ROL.3.1>PP</ROL.3.1>
</ROL.3>
<ROL.4>
<ROL.4.1>W</ROL.4.1>
<ROL.4.2>X</ROL.4.2>
<ROL.4.3>Y</ROL.4.3>
<ROL.4.4>Z</ROL.4.4>
</ROL>
</Message>
我的XSLT看起来像这样:
<xsl:for-each select="//Message/ROL">
<xsl:for-each select="ROL.3/ROL.3.1">
<aa> <xsl:value-of select="."/> </aa>
<xsl:choose>
<xsl:when test=".='FH'">
<Family>
<xsl:attribute name="FHFrist"> <xsl:value-of select="//ROL.4/ROL.4.3"/> </xsl:attribute>
<xsl:attribute name="FHLast"> <xsl:value-of select="//ROL.4/ROL.4.2"/> </xsl:attribute>
</Family>
</xsl:when>
<xsl:when test=".='PP'">
<Primary>
<xsl:attribute name="FHFrist"> <xsl:value-of select="//ROL.4/ROL.4.3"/> </xsl:attribute>
<xsl:attribute name="FHLast"> <xsl:value-of select="//ROL.4/ROL.4.2"/> </xsl:attribute>
</Primary>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:for-each>
结果我得到了:
<aa>FH</aa>
<Family FHFrist="C" FHLast="B"/>
<aa>PP</aa>
<Primary FHFrist="C" FHLast="B"/>
期望的结果:
<aa>FH</aa>
<Family FHFrist="C" FHLast="B"/>
<aa>PP</aa>
<Primary FHFrist="Y" FHLast="X"/>
我的问题是XSLT无法根据这个条件提取ROL.4.3和ROL.4.2的值 - 当测试=&#34;。=&#39; FH&#39; 当测试=&#34;。=&#39; PP&#39; 看来它正在提取第一个实例的价值,为什么?我怎么能解决这个问题?
答案 0 :(得分:0)
在XPath //
开始从文件的开头搜索。
e.g。这将使你从ROL.3.1到ROL.4.3
./../../ROL.4/ROL.4.3
您想要的结果将包括从一个ROL元素导航到另一个ROL元素。
我的假设是你会留在单个ROL的背景下,因此我认为需要以下结果?
<aa>FHCP</aa>
<Family FHFrist="C" FHLast="B"/>
<aa>PP</aa>
<Primary FHFrist="Y" FHLast="X"/>
基于以上结果......
<xsl:for-each select="//Message/ROL">
<xsl:for-each select="ROL.3/ROL.3.1">
<aa>
<xsl:value-of select="." />
</aa>
<xsl:choose>
<xsl:when test=".='FH'">
<Family>
<xsl:attribute name="FHFrist">
<xsl:value-of select="./../../ROL.4/ROL.4.3" />
</xsl:attribute>
<xsl:attribute name="FHLast">
<xsl:value-of select="./../../ROL.4/ROL.4.2" />
</xsl:attribute>
</Family>
</xsl:when>
<xsl:when test=".='PP'">
<Primary>
<xsl:attribute name="FHFrist">
<xsl:value-of select="./../../ROL.4/ROL.4.3" />
</xsl:attribute>
<xsl:attribute name="FHLast">
<xsl:value-of select="./../../ROL.4/ROL.4.2" />
</xsl:attribute>
</Primary>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:for-each>