2012-03-26 25 views
10

は、私は、次のULを有する言う:XPATH軸(先行兄弟&以下-兄弟)を組み合わせ

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

Iがボブ&ロジャー間のすべてのLIを取得する必要があります。私はボブの後にすべてをつかむことができる//ul/li[contains(.,"bob")]/following-sibling::liと私は//ul/li[contains(.,"roger")]/preceding-sibling::liでローガーの前にすべてをつかむことができます。問題は私が2つを組み合わせようとするとき、私は余計な結果を得ることに終わります。

たとえば、//ul/li[contains(.,"bob")]/following-sibling::li[contains(.,"roger")]/preceding-sibling::liは、もちろん、bobの前の項目を無視するのではなく、rogerの前にすべてを取得します。

これらの2つのxpathを連鎖させる方法はありますか?

+0

がhttp://stackoverflow.com/questions/3354987/what-is-the-xpath-to-select-a-range-of-nodes –

答えて

19

試してみてください。

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

卑劣な搾取を見てみましょう変換ルールの:) – biziclop

+1

@biziclop - あなたが何を意味するかわからない。 'li = 'bob''や' li =' roger''の部分を意味しますか? '/ul/li[preceding-sibling::li[.='bob ']とfollowing-sibling :: li [。=' roger ']]'のようにすることもできます。 ( 'contains()'もそれらの述語で使用できます) –

+3

はい、それは私が意味していたものですが、私は不平を言っていませんでした。 – biziclop