gpt4 book ai didi

xslt - xsl :key not working when looping through nodeset obtained with xalan:nodeset

转载 作者:行者123 更新时间:2023-12-04 21:18:08 25 4
gpt4 key购买 nike

我发现了一个 xsl:key 似乎不起作用的情况。
我正在将 XSLT 1 与 Xalan(已编译)一起使用,这就是正在发生的事情:

1.- 这有效:名为 的 key 测试 1 工作正常:

<xsl:variable name="promosRTF">
<xsl:copy-of select="promo[@valid='true']"/>
</xsl:variable>
<xsl:variable name="promos" select="xalan:nodeset($promosRTF)" />

<!-- now the key: when defined and used here it works fine: -->
<xsl:key name="test1" match="//promo" use="'anytext'" />
<xsl:for-each select="key('test1','anytext')/*">
loop through elements in key... ok, works fine
</xsl:for-each>

<xsl:for-each select="$promos/*">
..loop through elements in variable $promos ...it is not empty so the loop iterates several times
</xsl:for-each>

2.- 这不起作用:键 test1 现已定义并使用 (我猜这是重点) 在循环中循环使用 xalan:nodeset 获得的元素
<xsl:variable name="promosRTF">
<xsl:copy-of select="promo[@valid='true']"/>
</xsl:variable>
<xsl:variable name="promos" select="xalan:nodeset($promosRTF)" />

<xsl:for-each select="$promos/*">
<!-- now the key: when defined and used (or just used) inside this for-each loop it does nothing: -->
<xsl:key name="test1" match="//promo" use="'anytext'" />
<xsl:for-each select="key('test1','anytext')/*">
loop through elements in key... NOTHING HERE, it does not work :(
</xsl:for-each>

..loop through elements in variable $promos ...it is not empty so iterates several times
</xsl:for-each>

有人知道发生了什么吗?请注意,变量 $promos 不是空的,因此循环确实在迭代,它是其中使用的键,它什么也不做。

非常感谢您提前。

PS :在 Martin 的回答之后,我发布了这个替代代码,它也不起作用:
<xsl:variable name="promosRTF">
<xsl:copy-of select="promo[@valid='true']"/>
</xsl:variable>
<xsl:variable name="promos" select="xalan:nodeset($promosRTF)" />

<!-- now the key: defined as a first level element: -->
<xsl:key name="test1" match="//promo" use="'anytext'" />
<xsl:for-each select="$promos/*">
<!-- but used inside this for-each loop it does nothing: -->
<xsl:for-each select="key('test1','anytext')/*">
loop through elements in key... NOTHING HERE, it does not work :(
</xsl:for-each>

..loop through elements in variable $promos ...it is not empty so iterates several times
</xsl:for-each>

解决方案:在 Martin 的评论中是问题的关键: 结果树片段中的节点被视为不同文档中的节点 .
Martin 也指出了解决方法: 在 XSLT 1.0 中,您需要使用 for-each 更改上下文节点,然后在 for-each 中调用 key。 此代码将起作用:
<xsl:variable name="promosRTF">
<xsl:copy-of select="promo[@valid='true']"/>
</xsl:variable>
<xsl:variable name="promos" select="xalan:nodeset($promosRTF)" />

<!-- now the key -->
<xsl:key name="test1" match="//promo" use="'anytext'" />
<xsl:for-each select="$promos/*">
<!-- inside this for-each we are in a different *document*, so we must go back: -->
<xsl:for-each select="/">
<xsl:for-each select="key('test1','anytext')/*">
loop through elements in key... and now IT WORKS, thanks Martin :)
</xsl:for-each>
</xsl:for-each>

..loop through elements in variable $promos ...it is not empty so iterates several times
</xsl:for-each>

最佳答案

我很惊讶您通过输入 xsl:key 没有收到错误消息。进for-each .在 http://www.w3.org/TR/xslt#key你可以看到 xsl:key定义为 <!-- Category: top-level-element -->顶级元素,所以你需要把它作为 xsl:stylesheet 的子元素或 xsl:transform .

关于xslt - xsl :key not working when looping through nodeset obtained with xalan:nodeset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18076417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com