结合在同一个XPath查询中使用在前和在后的同级直到第一个实例

时间:2018-11-15 22:59:40

标签: xpath siblings find-occurrences

在此之后的帖子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]的几乎所有组合,但都失败了,希望对构造有所帮助。

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本身。就是这样。