2013-10-07 34 views
2
<a id ="1"> 
...<c> 
......<b/> 
......<f/> 
......<b/> 
......<f/> 
...</c> 
</a> 
<a id="2"> 
...<c> 
......<b/> 
......<f/> 
......<f/> 
...</c> 
</a> 

如果任何元素依次有兩個或更多個f元素,返回節點a。如果可能,我更喜歡直XPath 2.0解決方案。什麼xpath會讓我a2但不是a1?我嘗試過以下的兄弟姐妹,職位等等,但無濟於事。xpath表達式依賴於同胞

回答

-1

,你可以得到A2使用本:

 //a[@id=2] 

只需使用id屬性。

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> 
1

在XPath 1.0:

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

你可以這樣做:

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

這就是說找到一個包含b元素的元素,該元素之後緊接着一個f元素,後面緊跟着一個f元素。

+0

Yes..that年代算法我也跟着.. :) –

-1

我想出了這一點:

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

與此類似? //a[/////following-sibling::*[1][self::f]/following-sibling::*[1][self::f]] – Paul