使用xslt迭代临时文档

时间:2013-09-24 10:08:14

标签: xslt-2.0

我正在尝试创建一个包含一些数据的临时文档,所以我没有把它分散在整个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才需要该函数?

1 个答案:

答案 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>