在同一个xpath查询中结合使用前后兄弟

rap*_*ard 20 xpath

我有一个非常简单的问题,但我似乎无法解决它.假设我有以下代码:

<a>
    <b property="p1">zyx</b>
    <b>wvu</b>
    <b>tsr</b>
    <b property="p2">qpo</b>
    <b>qcs</b>
</a>
Run Code Online (Sandbox Code Playgroud)

我想选择b拥有a property="p1"b节点和拥有的节点之间的节点property="p2".我可以用前面的兄弟和下面的兄弟轴做任何一个,但我似乎无法找到如何将两者结合起来.

Dim*_*hev 19

XPath 1.0:

/a/b[preceding-sibling::b/@property='p1' and following-sibling::b/@property='p2']
Run Code Online (Sandbox Code Playgroud)

的XPath 2.0:
表达上述具有XSLT 2.0一些怪癖,最好是使用新的,更安全的操作符<<(前)和>>(后).

/a/b[../b[@property='p2'] << . and . >> ../b[@property='p1']]
Run Code Online (Sandbox Code Playgroud)


小智 7

此外,这个XPath 1.0:

/a/b[preceding-sibling::b/@property='p1'][following-sibling::b/@property='p2']
Run Code Online (Sandbox Code Playgroud)

注意:请勿使用//第一步.每当您可以and通过谓词替换运算符时,请执行此操作.

在XPath 2.0中:

/a/b[. >> ../b[@property='p1']][../b[@property='p2'] >> .]
Run Code Online (Sandbox Code Playgroud)