如何用XPath获取首个attribute值为true的element的正确位置?
问题原因及解决方法
错误原因
你当前的表达式逻辑是先筛选出所有@attribute='true'的<element>节点,再在这个筛选后的子集里取节点的position()。这个position()是筛选后子集内的位置,所以第一个匹配节点在子集里的位置是1,head()取这个结果就得到了1。但你需要的是该节点在所有<element>兄弟节点中的位置,不是子集内的位置,这就是结果不符合预期的原因。
正确的XPath表达式
兼容XPath 1.0的写法
count(/elements/element[@attribute='true'][1]/preceding-sibling::element) + 1
- 步骤解析:
/elements/element[@attribute='true'][1]定位到第一个attribute值为true的<element>节点;preceding-sibling::element获取该节点之前的所有兄弟<element>节点;count()统计这些前置兄弟的数量,加1后就是目标节点在所有<element>中的位置。
XPath 2.0及以上简洁写法
index-of(/elements/element, /elements/element[@attribute='true'][1])
- 步骤解析:
index-of函数直接返回目标节点(第二个参数)在所有<element>节点序列(第一个参数)中的位置,一步得到结果。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

