我有一个非常简单的问题,但我似乎无法解决它.假设我有以下代码:
<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)