我正在尝试创建一个包含一些数据的临时文档,所以我没有把它分散在整个xsl文件中。我试图以下列方式遍历这些数据:
<xsl:variable name="stuff">
<foo name="bar" key="83"/>
<foo name="baz" key="73"/>
<foo name="qux" key="71"/>
<foo name="quux" key="72"/>
</xsl:variable>
<xsl:for-each select="$stuff/foo" >
<xsl:value-of select="@key" />
</xsl:for-each>
永远不会输入for-each块。我试图模仿here描述的方法。我也研究过使用node-set(),但据我所知,只有XSLT版本1.0才需要该函数?
答案 0 :(得分:0)
Tim C在以下主题中给出了完整的答案:Use a xsl:for-each over an xml to decide which label-value pairs are displayed?。我建议你看一下。
基本上对于 XSLT 2.0 ,您可以将您现在输入的XML直接包含在<xsl:variable>
的XSLT中:
<my:stuff>
<foo name="bar" key="83"/>
<foo name="baz" key="73"/>
<foo name="qux" key="71"/>
<foo name="quux" key="72"/>
</my:stuff>
然后在你的XSLT中需要声明一个变量:
<xsl:variable name="stuff" select="document('')/*/my:stuff" />
所以XSLT将是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my" exclude-result-prefixes="my">
<my:stuff>
<foo name="bar" key="83"/>
<foo name="baz" key="73"/>
<foo name="qux" key="71"/>
<foo name="quux" key="72"/>
</my:stuff>
<xsl:template match="/">
<xsl:variable name="stuff" select="document('')/*/my:stuff"/>
<xsl:for-each select="$stuff/foo">
<xsl:value-of select="@key" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>