2012-05-08 3 views
2

CSSセレクタをXPATHに変換する必要があったので、Nokogiri :: CSSのソースコードを見ています。サンプルコードを実行してxpath_forメソッドを呼び出した後、配列を返すことがわかります。どうしてこれなの? CSSセレクタが複数のxpathを返す可能性はありますか?なぜNokogiri :: CSS.xpath_forが配列を返すのですか?

[18] pry(main)> Nokogiri::CSS.xpath_for 'div.divddy input:first' 
=> ["//div[contains(concat(' ', @class, ' '), ' divddy ')]//input[position() = 1]"] 

答えて

5

CSS selector can contain multiple components separated by commas

5セレクタのグループ

セレクタのカンマ区切りリスト、リスト内の個々の各セレクタにより選択されたすべての要素の和集合を表します。 。例えば

div.divddy input:first, div#where_is input.pancakes_house { /*...*/ } 

それでおそらくは、あなたがそれにグループ化されたセレクタを渡す場合の配列を返します。たとえば、次のようになります。

>> Nokogiri::CSS.xpath_for 'div.divddy input:first, div#where_is input.pancakes_house' 
=> ["//div[contains(concat(' ', @class, ' '), ' divddy ')]//input[position() = 1]", "//div[@id = 'where_is']//input[contains(concat(' ', @class, ' '), ' pancakes_house ')]"] 

この場合、返される配列の長さは2です。

+2

より単純に: 'Nokogiri :: CSS.xpath_for" a、b "#=> [" // a "、" // b "]' – Phrogz

+4

@Phrogz:うん、しかし私はできないだろうファーゴのリファレンスでスリップする;) –

+1

素晴らしい答え、ありがとう!強制参照(OT)http://www.youtube.com/watch?v=dJUvPZI3Cr4 – bruno077

関連する問題