2011-02-10 12 views
6

私はクラスmedia-gallery-itemを持つdiv要素のコレクションを持っています。
要素番号xを選択したいと思います。位置がXPATHの述語を結合する

だけですべての項目を選択するとき、私は5つの結果

$x("//div[@id='content-area']//div[@class='media-gallery-item']") 

を取得する今、私は項目番号2を選択することができるようにしたいが、私はきちんと2を結合する方法を見つけ出すことはできません。

$x("//div[@id='content-area']//div[@class='media-gallery-item'][2]") 

$x("//div[@id='content-area']//div[@class='media-gallery-item' 
            and position() = 2]") 

実際にはANDではないので、これらのことはあまり意味がありませんが、「この最初にフィルタをかけてから2番目の一致を選択してください」ということはわかっています。 目的を選択することです(たとえば、2番目の要素でa要素のhref属性を取得してください)

+0

ただ、最初の重複が見つかっ使用してみてください[Iは、XPathとの最後のN個の要素を選択するにはどうすればよいです?](http://stackoverflow.com/questions/458596/how-do-i-select-the- last-n-elements-with-xpath) –

+0

これは重複していません。私は特定の位置を求め、それを別の述語と組み合わせます。他の投稿は最後のn個の項目を必要とします(正確な位置ではなく他の述語はありません) –

答えて

10

ステップ・バイ・ステップの答えに動作します。それぞれの親の第チャイルズが使用さ

div[@id='content-area']祖先を持つ要素を選択する、:

//div[@id='content-area']//div[2] 

(文書順に)第二選択するdiv[@id='content-area']祖先用いてdiv要素:

(//div[@id='content-area']//div)[2] 

違いに注意してください。から二番目です

//div[@id='content-area']//div[2][@class='media-gallery-item'] 

を要素を選択するには、:彼らはクラスのメディア・ギャラリー・アイテムの使用を持って提供し、それぞれの親の第二のチャイルズ、ある要素を、選択する

その後、クラスmedia-gallery-item持っている(それぞれの両親の)それらのチャイルズ:

//div[@id='content-area']//div[@class='media-gallery-item'][2] 

は(ドキュメント順に)div[@id='content-area']祖先とdiv要素を第二選択するには、それはを持って提供しますクラス:@Alejandroによって示唆されるように

(//div[@id='content-area']//div)[@class='media-gallery-item'][2] 

仕様はを引用:

(//div[@id='content-area']//div)[2][@class='media-gallery-item'] 

div[@id='content-area']祖先を持つすべてdiv要素とmedia-gallery-itemクラスから(文書順に)第2の選択し

述語は、軸に対して のノードセットをフィルタリングして新しい ノードセット。 ノードセットフィルタリングするの各ノードに対して、 PredicateExprは、コンテキストサイズとノードセット内のノードの 数と、近接 位置と、コンテキスト・ノードとしてその ノードで評価されますノードのノード集合 コンテキスト位置と軸に対して を

http://w3.org/TR/xpath/#predicates

の部材の近接位置0軸のノード集合が であり、軸が前軸の場合 の順番のノード集合内のノード集合のノードの位置になるように定義されている 軸がリバース軸

http://w3.org/TR/xpath/#dt-proximity-position

ボトムラインは、位置述語が軸に対して動作することです。また、優先順位を明示的に宣言するには括弧が必要です。したがって、child軸ではなく、descendant-or-self軸を解決した後のノード集合が、位置計算の際に考慮されます。

+0

良い答え、+1 –

+1

@Alejandro、おなじみ引用符:)私は答えにそれらを追加します。 – Flack

+0

今すぐ完全な答えです! –

0

括弧!

(//div[@id='content-area']//div[@class='media-gallery-item'])[2] 

+0

完全な分析のために私の答えをチェックすることもできます。 – Flack

0

あなたのアクセス属性が間違っているようです。

/div[@id='content-area' and @class='media-gallery-item'][2] 
関連する問題