我一直在尝试使用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>
答案 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)
<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 - 如果是这样的话,那么希望我的答案可以帮助你理解你在这种情况下做错了什么。