xpath表达式取决于兄弟姐妹

时间:2013-10-07 19:06:50

标签: xslt xpath xquery

<a id ="1">
...<c>
......<b/>
......<f/>
......<b/>
......<f/>
...</c>
</a>
<a id="2">
...<c>
......<b/>
......<f/>
......<f/>
...</c>
</a>

如果任何elem b按顺序后跟两个或多个f元素,则返回节点a。如果可能的话,我更喜欢直接的XPath 2.0解决方案。什么xpath会得到我a2而不是a1?我试过跟随兄弟姐妹,位置等等,但无济于事。

5 个答案:

答案 0 :(得分:1)

使用XPath 1.0:

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

答案 1 :(得分:1)

你可以这样做:

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

这就是找到一个包含b元素的元素,后面紧跟一个f元素,后面跟着一个f元素。

答案 2 :(得分: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>

答案 3 :(得分:-1)

你可以用这个获得a2:

       //a[@id=2]

只需使用id属性即可。

答案 4 :(得分:-1)

我想出了这个:

/a//c[f/following-sibling::*[1] = f]