xsl foreach循环不能在xml上运行

时间:2010-09-09 15:17:20

标签: .net xml xslt

我一直在尝试使用XSL迭代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>

2 个答案:

答案 0 :(得分:8)

根目录中只有一个languages节点。

您应该尽可能使用模板而不是for-each

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

在主模板中调用它:

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

答案 1 :(得分:2)

@Oded可能已经发布了最好的答案atm,试着去做。但在你的具体情况下,你写了

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

其中只有一个,所以重写为

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

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

as

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

<xsl:apply-templates/>

这个特殊的样式表应该适合你。

再说一次:如果可以,请按照Oded的建议行事。有时候,你必须使用for-each-loops - 如果是这样的话,那么希望我的答案可以帮助你理解你在这种情况下做错了什么。