2012-03-26 21 views
10

說我有以下UL:組合XPATH軸(前同輩&以下同胞)

<ul> 
    <li>barry</li> 
    <li>bob</li> 
    <li>carl</li> 
    <li>dave</li> 
    <li>roger</li> 
    <li>steve</li> 
</ul> 

我需要抓住鮑勃&羅傑之間的所有LIS。我可以在//ul/li[contains(.,"bob")]/following-sibling::li之後抓住所有東西,並且我可以在羅傑之前抓住所有東西,與//ul/li[contains(.,"roger")]/preceding-sibling::li。問題是,當我嘗試將兩者結合起來時,我最終得到了額外的結果。

例如,//ul/li[contains(.,"bob")]/following-sibling::li[contains(.,"roger")]/preceding-sibling::li當然會在羅傑之前得到所有東西,而不是在鮑勃之前忽略物品。

有沒有辦法將這兩個xpath鏈接在一起?

+0

看看http://stackoverflow.com/questions/3354987/what-is-the-xpath-to-select-a-range-of-nodes – 2012-03-26 20:52:45

回答

19

嘗試:

/ul/li[preceding-sibling::li='bob' and following-sibling::li='roger'] 
+0

卑鄙開發的轉換規則。 :) – biziclop 2012-03-26 21:01:36

+1

@biziclop - 不確定你的意思。你是指我做'li ='bob'或者'li ='roger'的部分嗎?它也可以這樣做:'/ul/li[preceding-sibling::[[='bob']和following-sibling :: li [。='roger']]'。 ('contains()'也可以在那些謂詞中使用) – 2012-03-26 21:04:43

+3

是的,這就是我的意思,但我沒有抱怨,我鼓掌。 – biziclop 2012-03-26 21:05:43