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


77

我的样本输入XML是:

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

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

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

Answers:



57

以下应该工作:

/root/a/b[2]

如果没有,请尝试:

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

1
我来这里是为了找到两者之间的区别,请您说明一下它们之间的不同吗?
安德烈(Andre)

11
position()指的是dom中的位置[2]指的是结果列表中的第二个结果。
Becky Conning

2
@安德烈 在for-each循环select语句中使用时,它们是相同的。在position()循环本身中使用时,它引用结果集。该[n]格式仅用作速记方式,因为它是[ ]块内唯一的条件,否则position()必须使用,如中所述//a[(@id="xx") and (position()=3)],即“任何第一个id具有xx的第五个链接”。
Patanjali

@Patanjali令人困惑-位置为3的链接是第5个链接?在我看来[2]可以代替:nth-​​of-type(2),而[position()= 2]等同于:nth-​​child(2)呢?我想我们需要几个例子来消除雾气。
bitoolean

@Patanjali我已经测试了它,现在我已经理解了它的简写,它只能通过运行\\*[2]\\*[position()=2]针对问题的XML来给我“ item1” 。谢谢!
bitoolean
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.