0

我需要循环我的根标签内的所有元素,比如

<?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”值?

4

3 回答 3

3

您只有一个 node 实例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>
于 2012-11-22T15:43:30.043 回答
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>
于 2012-11-22T15:42:58.807 回答
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>
于 2012-11-22T19:30:33.030 回答