<a id ="1">
...<c>
......<b/>
......<f/>
......<b/>
......<f/>
...</c>
</a>
<a id="2">
...<c>
......<b/>
......<f/>
......<f/>
...</c>
</a>
如果任何元素 b 后接两个或多个 f 元素,则返回节点 a。如果可能的话,我更喜欢直接的 XPath 2.0 解决方案。什么 xpath 会给我 a2 而不是 a1?我曾尝试关注兄弟姐妹、职位等,但无济于事。
使用 XPath 1.0:
a[.//b[following-sibling::*[1]/self::f and following-sibling::*[2]/self::f]]
你可以这样做:
//a[.//b/following-sibling::*[1][self::f]/following-sibling::*[1][self::f]]
这就是说要找到包含 a 元素的 a 元素,然后是 af 元素,然后是 af 元素。
使用XPATH 1.0可以使用以下内容:
//b[following-sibling::*[
position()=1 and self::f
and
./following-sibling::*[
position()= 1 and self::f
]
]
]/ancestor::a[1]
输出
<a id="2">
...<c>
......<b/>
......<f/>
......<f/>
...</c>
</a>
我想出了这个:
/a//c[f/following-sibling::*[1] = f]
你可以用这个得到a2:
//a[@id=2]
只需使用 id 属性。