在这里跟随post在同一个xpath查询中结合使用前一个和后一个同级,我想做同样的事情,只是我想让节点一直到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]的每一种组合,但都失败了,我希望在结构上得到一些帮助。
实现这一点的一种方法是使用以下XPath-1.0表达式:
/a/b[preceding-sibling::b/@property='p1' and not(preceding-sibling::b/@property='p2' or @property='p2')]
它检查给定的b
元素是否具有名为p1
的前同级,而不是p2
或p2
本身的前同级