gpt4 book ai didi

position - 在 xpath 表达式中引用当前节点的位置

转载 作者:行者123 更新时间:2023-12-04 18:36:23 26 4
gpt4 key购买 nike

(注意:这篇文章已经过编辑以显示特定的用例。见底部。)

我想在 xpath 表达式(其中上下文发生变化)中使用当前节点的 position() 值。不幸的是,我没有看到任何简单的方法来做到这一点,因为 current()/position() 似乎总是等于 1。

[我认为这是因为 current()/position() 说“节点 current() 在……的上下文中的位置是什么……仅包含 current() 的单节点集。]

具体来说,假设我有一个节点序列 $seq,我想返回序列 ($seq[n]) 中的第 *n* 个节点,其中 n 等于 position() 的当前值(即在评估语句之前的 position() 值)。

显然,$seq[position()] 不起作用,因为它扩展为 seq[position() = position()],返回整个序列。

$seq[position(current())] 是胡言乱语。

我唯一能找到的似乎可能有效的是

for $pos in position() return $seq[$pos]

我认为有一种更简单的方法。

编辑
有人要求我提供一个更具体的例子来说明我正在尝试做什么。实际上,我发现第一个人的答案足以满足我的需要,尽管并不比我自己想出的简单多少(“for $pos in position() return $correctOrder[$pos]”选项)。

这是实际情况:我有一组“ session ”节点,每个节点都有一个@startTime 属性。我想找出与 @startTime 属性相关的哪些是乱序的,或者至少不在正确的位置,如果输入文档的节点按 @startTime 正确排序。

这只是在每个 session 节点上执行的众多测试之一。

我想要做的是创建一个序列,该序列具有正确顺序的节点,并将文档排序序列中的第 n 个元素与正确排序序列中的第 n 个元素进行比较。

像这样的东西:
<xsl:template match="/">
<xsl:variable name="correctOrder" as="node()*">
<xsl:for-each select="session">
<xsl:sort select="@xs:dateTime(@startTime)"/>
<xsl:sequence select="."/>
</xsl:for-each>
</xsl:variable>

<xsl:for-each select="session">

<----大量的各种测试---->
<xsl:if test="current()/@startTime eq 
$correctOrder[<-here I want to put the value "position()" had prior to this <xsl:if> statement->]/@startTime"
<error description="Node out of order."/>
</xsl:if>

<--- 很多其他测试----->
</xsl:for-each>

最佳答案

既然您已将问题标记为 XSLT 2.0,我将使用一个变量,例如

<xsl:variable name="pos" as="xs:integer" select="position()"/>

然后使用该变量,例如
<xsl:sequence select="$seq[$pos]"/>

关于position - 在 xpath 表达式中引用当前节点的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9046098/

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