XSLT "key" 元素的范围(根节点、上下文)
Scope (root node, context) of XSLT "key" Element
我定义了一个 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 引擎。
(我想不出一个合理的方法来为此提供一个完整的工作示例。我也不确定正确的术语,例如 "scope" - 也许如果我知道正确的术语我已经能够找到我的答案了。如果问题不够清楚,请告诉我,我会尝试将其编辑成更好的形状。)
在 XSLT 1.0 中,键不能跨文档使用。您的 $outOfScopeNodeSet
似乎包含一个 node-set ,其根节点与正在处理的 XML 文档的根节点不同(可能由 exsl:node-set()
函数创建?) - 而该密钥应该从已处理的 XML 文档中获取一个值。
要解决这个问题,您需要在调用key()
函数之前return将上下文返回到处理过的XML文档,例如:
<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>
我定义了一个 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 引擎。
(我想不出一个合理的方法来为此提供一个完整的工作示例。我也不确定正确的术语,例如 "scope" - 也许如果我知道正确的术语我已经能够找到我的答案了。如果问题不够清楚,请告诉我,我会尝试将其编辑成更好的形状。)
在 XSLT 1.0 中,键不能跨文档使用。您的 $outOfScopeNodeSet
似乎包含一个 node-set ,其根节点与正在处理的 XML 文档的根节点不同(可能由 exsl:node-set()
函数创建?) - 而该密钥应该从已处理的 XML 文档中获取一个值。
要解决这个问题,您需要在调用key()
函数之前return将上下文返回到处理过的XML文档,例如:
<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>