如何在XPath位置步骤限制匹配数或选择匹配索引?
解决XPath选择全局第一个匹配元素的问题
要实现你要的效果,直接用括号调整表达式优先级就行,正确的XPath表达式是:
(//foo//bar)[1]/target
为什么这个写法有效?
- 括号里的
//foo//bar会先找出所有位于<foo>节点下(无论中间隔多少层未知名称节点)的<bar>元素,返回一个完整的节点集合。 [1]作用在整个括号的结果上,会从这个全局集合里取第一个匹配的<bar>节点。- 最后选取该
<bar>节点下的所有<target>子元素,正好得到你需要的<target>one</target>和<target>two</target>。
原写法失效的原因
你之前用的//foo//bar[1],这里的[1]是针对每个<bar>的父节点生效——意思是“找到每个父节点下的第一个<bar>”,所以每个<blah>(或其他未知名称的中间节点)下面的第一个<bar>都会被选中,自然会返回两组<target>。
内容的提问来源于stack exchange,提问作者Garret Wilson
相关产品推荐
相关产品推荐

