2017-10-19 11 views
1

3つのリスト要素を持つすべてのdivのh1を検索します。 (sourceXPathによるノードの検索

<div> 
    <div class="fast"> 
     <h1>Fast</h1> 
     <ul> 
     <li>Cars</li> 
     <li>New Horizon</li> 
     <li>Chinese Food</li> 
     </ul> 
    </div> 

    <div class="expensive"> 
     <h1>Expensive</h1> 
     <ul> 
     <li>Cars</li> 
     <li>New Horizon</li> 
     <li>Apple Watches</li> 
     </ul> 
    </div> 

    <div class="nasa"> 
     <h1>NASA-Owned</h1> 
     <ul> 
     <li>Lunar Module</li> 
     <li>New Horizon</li> 
     </ul> 
    </div> 
    </div> 

これは、私のために働いた(しかし、私は簡単な構文を見つけることを望む)

//ul/li[count(../li)=3]/../../h1 

答えて

2

私は

//div[count(.//li)=3]/h1 

を書くしかし、注意してくださいでしょう:あなたは、これはあなたを与える「ことで3つのリストの要素を持つすべてのdiv」を求めていました。受け入れられた答えは、この特定のテスト文書で同じ結果を与えるかもしれませんが、同じことではない、少なくとも3つのリスト項目を持つ少なくとも1つの番号なしリストを含むすべての要素を提供します。

+0

ありがとうございます。 –

+0

まだ論理的にはOKではありません。そのdivは 'ul'要素の上に置くことができ、' h1'があれば選択されます。 私は勉強のためにそのようなロケータを書いても構いませんが、プロジェクトでこれを使うのはお勧めしません) –

+0

私たちが要件について知っている唯一のことは、何が問題なのかです。実際のプロジェクトでは、要件のより正確な記述が求められることに同意します。 –

1

は、以下のようにfollowing-sibling axis構文を実装するようにしてください:

//h1[following-sibling::ul[count(li)=3]] 
+0

非常に便利なリンクです、ありがとうございました:) –

1

正確なH1を一致させるにはdivの下:

//div/h1[following-sibling::ul[count(li)=3]] 
2

=それは短い/簡単にすることはできません)

//div[ul[count(li)=3]]/h1 

PS。 OK、これは最終的なもの:

//*[ul[count(li)=3]]/h1 
+0

優秀:)私はあなたが 'div'を必要としているので、両方の場合に正しいでしょうが、' div'でより正確になると思います:) –

+1

はい、div =を保つのが良い)、メンテナンス性のためにクラス/アイデアを追加して、それが正しい要素であることを確認してください。)誰でも彼のニーズに合わせることができる最もシンプルな設定です) –