7

私はこのようなXMLを持っています

<div class="yay">
 <div class="foo"></div> 
 <div class="foo"></div>
 <div class="bar"></div>
 <div class="foo"></div>
 <div class="bar"></div>
 <div class="foo"></div>
</div>

クラスが「foo」であるn番目のdivを選択する方法はありますか?

私はすべてのfooを選択します//div[@class="yay"/div[@class="foo"]

foo #3 を選択したい場合、どうすればいいですか? 何かのようなもの:

//div[@class="yay"/div[@class="foo"][3]?

4

2 に答える 2

25

これは XPath で最もよくある FAQ の 1 つです

使用:

(//div[@class="yay"]/div[@class="foo"])[3]

説明:

XPath 疑似演算子//は、演算子よりも優先度 (プライオリティ) が低くなり[]ます。

したがって

//div[@class="yay"]/div[@class="foo"][3]

意味

属性に値があり、その ( ) がその親の 3 番目の子であるすべてを選択divclass"foo"divdivます。

そのような子を 3 つ以上持つ親div要素が複数ある場合は、3 番目の子がすべて選択されます。

多くの式言語と同様に、組み込みの優先順位をオーバーライドする方法は、括弧を使用することです。

于 2012-05-16T03:18:31.207 に答える
0

これは私にとって//div/div[@class="foo"][2]はうまくいくので、あなたは正しいですか、それとも、たとえば「yay」の下の要素番号 3 を選択して、その「foo」かどうかを確認したかったのですか?

于 2012-05-16T00:46:57.077 に答える