それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

文字を含むタグを取り出すxpath

CSSで取り出したり、XPathをフルパスで取り出すと面倒なので。

マッチ文字でデータを取り出して使いたい

doc.xpath("//*[contains(./text(),'Ruby')]")

Xpathはソレだけでクエリ言語として成立しているので、これを覚えるのが一番手っ取り早い。

こまったら 次を使う

//タグ[contains( ./text() , "文字列" )] 

または属性で絞って

//タグ[contains( ./@attr , "文字列" )] 
//*[contains( ./@attr , "文字列" )] 


あまりにざっくり書くと、親子ノードを連れてきちゃうので、タグや属性・text()は入れた方がいい
//*は全ノードを示す

よくある勘違い:contains(./text(),'検索文字')とcontains(.,'検索文字')は同じだよね?

いいえ、違います

  • "./text()" とした場合は、 自分のノードのテキスト表現
  • "." とした場合 は、子孫ノードを含めた、テキスト表現

ぜんぜん違うんだお

ret = document.evaluate("//*[contains(text(),'検索文字')]",document)