我需要循环我的根标签内的所有元素,如
<?xml version="1.0" encoding="UTF-8"?>
<root>
<mijnFamilyPack>
<rt>id123</rt>
<rt>id345</rt>
<rt>id084</rt>
<INPORTING>NO</INPORTING>
<id>345</id>
</mijnFamilyPack>
</root>
我写了for-each来获取所有“rt”元素值。但我可以单独使用第一个cvalue。
<xsl:for-each select="/root/mijnFamilyPack/">
<xsl:value-of select="rt"/>
</xsl:for-each>
请你告诉我如何单独获得“rt”值?
答案 0 :(得分:3)
您只有一个节点mijnFamilyPack
的实例,因此<xsl:for-each select="/root/mijnFamilyPack/">
正在循环一次,并且您正在打印第一个rt
节点的值。
您可能还希望将rt
节点放在for-each
中并打印当前节点的值,如下所示:
<xsl:for-each select="/root/mijnFamilyPack/rt">
<xsl:value-of select="."/>
</xsl:for-each>
如果您认为mijnFamilyPack
可能有多个节点,则使用嵌套循环,首先迭代mijnFamilyPack
,然后再迭代rt
mijnFamilyPack
个节点内的 <xsl:for-each select="/root/mijnFamilyPack/">
<xsl:for-each select="rt">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:for-each>
。
{{1}}
答案 1 :(得分:2)
您正在选择mijnFamilyPack
节点,而不是rt
节点集:
<xsl:for-each select="/root/mijnFamilyPack/rt">
<xsl:value-of select="."/>
</xsl:for-each>
考虑使用实际模板而不是for-each
,但是:
<xsl:template match="/root/mijnFamilyPack/rt">
<xsl:value-of select="."/>
</xsl:template>
答案 2 :(得分:1)
就像Oded所说,你应该使用模板来匹配rt
元素。此处不应使用For-each
(另请参阅此主题中的答案:For loops vs. apply-templates)
如果将此XSLT应用于源XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<list>
<xsl:apply-templates select="//rt"/>
</list>
</xsl:template>
<xsl:template match="rt">
<rt>
<xsl:value-of select="."/>
</rt>
</xsl:template>
</xsl:stylesheet>
你得到了所需的输出:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<rt>id123</rt>
<rt>id345</rt>
<rt>id084</rt>
</list>
此致 彼得