2012-11-22 102 views
0

我需要循環我的根標籤內的所有元素,如的for-each在XSLT

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

我已經寫了,每次來獲得所有「RT」元素的值。但我可以單獨評估第一個值。

<xsl:for-each select="/root/mijnFamilyPack/"> 
<xsl:value-of select="rt"/> 
</xsl:for-each> 

可以請你告訴我怎樣才能得到'rt'值?

+0

一點點改變我的xml代碼。 – ezhil

+0

嘗試始終發佈完整的源xml並完成模板推薦的xsl代碼 – Peter

回答

1

Like 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> 

問候, 彼得

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> 
+0

+1。 –

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,然後第二個在mijnFamilyPack節點內迭代rt

<xsl:for-each select="/root/mijnFamilyPack/"> 
    <xsl:for-each select="rt"> 
     <xsl:value-of select="."/> 
    </xsl:for-each> 
</xsl:for-each>