0

我定义了一个 XSLT 键。我需要从 for-each 循环中访问密钥,其中该循环正在处理一个节点集,该节点集超出了定义密钥的范围。

片段,我在其中标记了两行,一行有效,另一行无效:

<xsl:value-of select="key('name', 'use')"/> <!-- works -->
<xsl:for-each select="$outOfScopeNodeSet">
    <xsl:value-of select="key('name', 'use')"/> <!-- does not work -->
</xsl:for-each>

有没有办法从 for-each 循环中访问密钥?

XSLT 1.0,msxsl 引擎。

(我想不出一种合理的方法来为此提供一个完整的工作示例。我也不确定正确的术语,例如“范围”-也许如果我知道正确的术语,我就能找到我的已经回答了。如果问题不够清楚,请告诉我,我会尝试将其编辑成更好的形状。)

4

1 回答 1

4

在 XSLT 1.0 中,键不能跨文档工作。似乎您$outOfScopeNodeSet包含一个节点集,其根节点与正在处理的 XML 文档的根节点不同(可能由exsl:node-set()函数创建?) - 而键应该从已处理的 XML 文档中获取值。

要解决此问题,您需要在调用该函数之前将上下文返回到已处理的 XML 文档key(),例如:

<xsl:variable name="root" select="/" />
<xsl:for-each select="$outOfScopeNodeSet">
    <xsl:variable name="use" select="some-value" />
    <xsl:for-each select="$root">
        <xsl:value-of select="key('name', $use)"/>
    </xsl:for-each>
</xsl:for-each>
于 2016-01-07T18:58:04.323 回答