ChatGPT解决这个技术问题 Extra ChatGPT

使用 xpath 获取节点的第 N 个子节点

我的示例输入 XML 是:

<root>
 <a>
   <b>item</b>
   <b>item1</b>
   <b>item2</b>
   <b>item3</b>
   <b>item4</b>
 </a>
</root>

我想选择一个节点 b,其位置是变量的值。

如何使用变量的值来测试节点的位置?


r
remi bourgarel

你可以使用这个:

/root/a/b[position()=$variable]

position() 基于 1

http://saxon.sourceforge.net/saxon6.5.3/expressions.html


请记住,它不是 0 索引的。我只是花了 2 个小时浪费时间在位置 0 上寻找东西。
R
Ronald Wildenberg

以下应该有效:

/root/a/b[2]

如果没有,请尝试:

/root/a/b[position()=2]

我来这里是为了找出这两者之间的区别,你能解释一下它们有什么不同吗?
position() 指 dom 中的位置 [2] 指结果列表中的第二个结果。
@安德烈。在 for-each 循环 select 语句中使用时,它们是相同的。在循环本身中使用 position() 时,它指的是结果集。 [n] 格式仅用作简写,因为它是 [ ] 块内的唯一条件,否则必须使用 position(),如 //a[(@id="xx") and (position()=3)],即“任何具有 id 的第五个链接xx”。
@Patanjali 这令人困惑 - 与 position() 3 的链接是第 5 个链接?在我看来,[2] 可以用来代替 :nth-of-type(2),而 [position()=2] 则相当于 :nth-child(2)?我想我们需要几个例子来消除迷雾。
@Patanjali 我想我已经理解了它是一个速记的部分,因为我已经对其进行了测试,并且它只通过针对问题的 XML 运行 \\*[2]\\*[position()=2] 给我“item1”。谢谢!