如何使用XPath获取元素全局索引而非相对位置?
解决XPath全局索引选取元素的问题
你对//a[1]的行为理解完全正确!这个表达式的逻辑是:先通过//a找到所有<a>元素,然后针对每个元素的父节点,选取该父节点下的第一个<a>——所以otherName下的第一个<a>(item1)和lastName下的第一个<a>(item4)都会被选中,这就是你得到两个结果的原因。
要获取全局范围内的第N个<a>元素,你需要用括号把整个匹配集合的表达式包裹起来,再添加索引,语法如下:
(//a)[1]
这个写法的逻辑是:
- 先执行括号内的
//a,得到包含全部5个<a>元素的完整集合(顺序是文档中出现的先后顺序:item1 → item2 → item3 → item4 → item5) - 再从这个集合中选取第1个元素,也就是全局第一个
<a>(item1)
同理,如果你要选全局第3个元素,就用:
(//a)[3]
会得到item3;选全局第4个就用(//a)[4],得到item4,以此类推。
需要注意的是,XPath的索引是从1开始计数的,这和部分编程语言的0索引逻辑不一样,别搞混啦!
内容的提问来源于stack exchange,提问作者Michael Shalmi
相关产品推荐
相关产品推荐

