我有一个非常简单的问题,但我似乎无法解决它。假设我有以下代码:
<a>
<b property="p1">zyx</b>
<b>wvu</b>
<b>tsr</b>
<b property="p2">qpo</b>
<b>qcs</b>
</a>
我想选择拥有b
的{{1}}节点和property="p1"
b
节点之间的节点。我可以用前面的兄弟和下面的兄弟轴做任何一个,但我似乎无法找到如何将两者结合起来。
答案 0 :(得分:19)
XPath 1.0 :
/a/b[preceding-sibling::b/@property='p1' and following-sibling::b/@property='p2']
XPath 2.0:
上面的表达式在XSLT 2.0中有一些怪癖,最好使用新的更安全的运算符<<
(之前)和>>
(之后)。
/a/b[../b[@property='p2'] << . and . >> ../b[@property='p1']]
答案 1 :(得分:7)
此外,这个XPath 1.0:
/a/b[preceding-sibling::b/@property='p1'][following-sibling::b/@property='p2']
注意:请勿使用//
作为第一步。每当您可以用谓词替换and
运算符时,请执行此操作。
在XPath 2.0中:
/a/b[. >> ../b[@property='p1']][../b[@property='p2'] >> .]
答案 2 :(得分:-1)
您可以使用and
组合谓词中的测试。