gpt4 book ai didi

xpath - XSLT2 : How to reference attributes about the current node in XPath2 predicates

转载 作者:行者123 更新时间:2023-12-03 15:33:33 24 4
gpt4 key购买 nike

我已经发过 another question以此为一方面。我被告知要澄清这个问题,但那个问题已经很长很复杂了,所以我创建了一个新问题。

我想知道在 XPath 表达式测试中是否有引用当前节点属性的标准方法。

例如,请考虑以下 XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="potato/stem[eye]">
In session <xsl:value-of select="@sessionID"/>, the potato had <xsl:value-of select="/potato/stem[@sessionID=@sessionID][scc]/scc/@leafnumber"/> s.c.c. leaves.
</xsl:for-each>
</xsl:template>

(此问题底部的 XML 源代码。)
(请注意,for-each 引用了 stem[eye] 类型的节点,但第二个值请求引用了 stem[scc] 类型的节点,它们位于源 XML 树的不同分支上。)

现在,很明显,其中的“@sessionID=@sessoinID”部分几乎毫无意义,因为 XPath 将其视为“节点的 sessionID 属性的值应该等于……节点的 sessionID 属性的值”。

但我想说的是“测试以确保该节点(XPath 表达式中的那个)的 seesionID 属性的值与我所在的任何/stem[eye] 节点的节点的 sessionID 相同马上。”

我不能用变量来做到这一点,因为不允许在 for-each 子句中声明变量。

作为引用,这是 XML 源。它的结构不是人们想要的,但它是我必须使用的。
<?xml version="1.0" encoding="utf-8"?>
<potato>
<stem sessionID="1">
<eye number = "25"/>
</stem>
<stem sessionID="3">
<eye number = "33"/>
</stem>

<stem sessionID="1">
<scc leafnumber = "234" />
</stem>
<stem sessionID="2">
<scc leafnumber = "433"/>
</stem>
<stem sessionID="3">
<scc leafnumber = "463"/>
</stem>

<stem sessionID="1">
<agd leafnumber = "154"/>
</stem>
<stem sessionID="2">
<agd leafnumber = "233"/>
</stem>
<stem sessionID="3">
<agd leafnumber = "113"/>
</stem>
</potato>

我正在寻找的输出是:

在 session 1 中,马铃薯有 234 s.c.c.树叶。

在 session 3 中,马铃薯具有 463 s.c.c.树叶。

(当然,这只是沙盒示例。我意识到可能有一些简单的方法可以以完全不同的方式完成上述输出,但我希望这个示例能解决我的问题,即如何使用与当前节点关联的值(例如,在 for-each 中)在 XPath 的谓词中搜索不同的。)

最佳答案

在 XSLT 1.0 中,您可以使用标准函数 current() 指的是当前模板匹配的节点或者最里面的xsl:for-each :

/potato/stem[@sessionID=current()/@sessionID][scc]/scc/@leafnumber

或者通过定义一个键 (在全局层面):
<xsl:key name="kPotById" match="stem[scc]" use="@sessionID"/>

并引用此键:
key('kPotById', @sessionID)/scc/@leafnumber

在 XSLT 2.0/XPath 2.0 中,您有其他方式来表达此 (范围变量):
for $thisSessionID in @sessionId
return
/potato/stem[@sessionID=$thisSessionID][scc]/scc/@leafnumber

关于xpath - XSLT2 : How to reference attributes about the current node in XPath2 predicates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7926680/

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