2
<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?我曾尝试关注兄弟姐妹、职位等,但无济于事。

4

5 回答 5

1

使用 XPath 1.0:

a[.//b[following-sibling::*[1]/self::f and following-sibling::*[2]/self::f]]
于 2013-10-07T20:24:51.963 回答
1

你可以这样做:

//a[.//b/following-sibling::*[1][self::f]/following-sibling::*[1][self::f]]

这就是说要找到包含 a 元素的 a 元素,然后是 af 元素,然后是 af 元素。

于 2013-10-07T20:57:51.193 回答
0

使用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>
于 2013-10-07T20:05:16.460 回答
-1

我想出了这个:

/a//c[f/following-sibling::*[1] = f]
于 2013-10-09T17:39:47.687 回答
-1

你可以用这个得到a2:

       //a[@id=2]

只需使用 id 属性。

于 2013-10-07T19:20:43.503 回答