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

Combining the use of preceding- and following-sibling in the same XPath query up to first instance

在 post 之后 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] 的所有组合,但都失败了,希望在构建方面得到一些帮助。

实现此目的的一种方法是使用以下 XPath-1.0 表达式:

/a/b[preceding-sibling::b/@property='p1' and not(preceding-sibling::b/@property='p2' or @property='p2')]

它检查给定的 b 元素是否具有名为 p1preceding-sibling 并且不是 preceding-sibling p2p2 本身。就这些了。