2010-09-09 69 views
0

我一直在嘗試使用XSL遍歷XML文件,但是我遇到了主要的麻煩,因爲唯一的第一種語言被識別。幫幫我!xsl foreach循環無法在xml上工作

<?xml version="1.0"?> 
<languages count="1"> 
    <language>English (UK)</language> 
    <language>Spanish</language> 
    <language>Arabic</language> 
</languages> 

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
    <html> 
     <body> 
     <table border="1"> 
      <tr> 
      <xsl:for-each select="languages"> 
       <th> 
       <xsl:value-of select="language"/> 
       </th> 
      </xsl:for-each> 
      </tr> 
     </table> 
     </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

回答

8

您在根處只有一個languages節點。

您應該使用的模板,而不是for-each儘可能:

<xsl:template match="language"> 
    <th> 
     <xsl:value-of select="."/> 
    </th> 
</xsl:template> 

,並在主模板調用它:

<tr> 
    <xsl:apply-templates select="languages/language"/> 
</tr> 
+0

+1適用於模板建議。 – 2010-09-09 15:24:42

+0

非常好的做法,謝謝。 – wonea 2010-09-09 15:39:17

2

@Oded可能已經發布了最好的答案ATM,儘量去接着就,隨即。但是,在特定情況下,你已經寫

<xsl:for-each select="languages"> 

其中只有一個,所以重寫爲

<xsl:for-each select="languages/language"> 

<xsl:value-of select="language"> 

<xsl:value-of select="."> 

<xsl:apply-templates/> 

這個特殊的樣式表應該適合你。

再說一遍:如果可以的話,按照Oded的建議。有時候,你將不得不使用for-each-loop - 如果是,那麼希望我的回答能幫助你理解你在這種情況下做錯了什麼。