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 块。我试图模仿这里描述的方法。我还研究了使用 node-set(),但据我所知,只有 XSLT 1.0 版才需要该函数?

4

1 回答 1

0

Tim C 在以下线程中给出了完整的答案:Use a xsl:for-each over an x​​ml to determine 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>
于 2013-09-24T10:32:40.213 回答