在此之后的帖子Combining the use of preceding and following sibling in the same xpath query除了我想使节点达到p2的首次出现以外,我都希望这样做。
所以修改后的示例数据是
<a>
<b property="p1">zyx</b>
<b>wvu</b>
<b>tsr</b>
<b>dcv</b>
<b property="p2">qpo</b>
<b>qcs</b>
<b property="p2">wee</b>
<b>tbg</b>
<b>rty</b>
<b property="p2">qwe</b>
<b>jkl</b>
</a>
我尝试过
/a/b[preceding-sibling::b/@property='p1' and following-sibling::b[1]/@property='p2']
这给了我dcv,qcs和rty。 然后我尝试了
/a/b[preceding-sibling::b/@property='p1' and (following-sibling::b/@property='p2')[1]]
这给了我wvu,tsr,dcv,qpo,qcs,wee,tbg和rty。
我真正需要的是从p1到第一个p2或wvu,tsr和dcv。我已经尝试过[1]的几乎所有组合,但都失败了,希望对构造有所帮助。
答案 0 :(得分:0)
一种实现此目的的方法是使用以下XPath-1.0表达式:
/a/b[preceding-sibling::b/@property='p1' and not(preceding-sibling::b/@property='p2' or @property='p2')]
它检查给定的b
元素是否具有名为{{1}的先前兄弟姐妹,而不是{{1 }}或p1
本身。就是这样。