xpathまとめ

  • 127
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

xpathとは、HTMLのような木構造のノードを表現するときの記述方法。pタグの2番目の要素、などの指定ができる。

要素の指定パターン

以下のHTMLファイルで、<p class="outline">にアクセスする方法を列挙。

※ブラウザのコンソールからアクセスするには、$x(xpath)を実行する。

<html>
  <body>
    <div id="container">
      まとめ
      <p class="header">Xpathについて</p>
      <p class="outline">Xpathとは、XML Path Languageの略で...</p>
      <p class="footer">© ... Co., Ltd. ALL Rights Reserved.</p>
    </div>
  </body>
</html>

指定方法

$x('/html/body/div/p[2]') # 先頭からきちんと書いた場合

$x('//p[2]') # //で途中のパスを省略できる

$x('//p[@class="header"]') # 属性の値を指定する

$x('//p[@class="header"]/following-sibling::p[@class="outline"]') # 前隣の要素から指定する。[]で条件指定。

$x('//p[@class="footer"]/preceding-sibling::p[@class="outline"]') # 後ろ隣の要素から指定する。

文字列で指定するパターン

$x('//p[1]/text()="Xpathについて"') # 完全一致。真偽値が返る。
$x('//p[1]/.="Xpathについて"') # 完全一致。真偽値が返る。

$x('//p[text()="Xpathについて"]') # 完全一致。一致した要素が返る。
$x('//p[.="Xpathについて"]') # 完全一致。一致した要素が返る。

$x('//p[contains(text(), "について")]') # 部分一致
$x('//p[contains(., "について")]') # 部分一致

文字列を取得する

string関数を使う。

$x('string(//p[2])')

. と text() の違い

.は、自分の要素と、子の要素テキスト全てを返すが、text()は、自分の要素のテキストしか返さない。よって、以下のstring関数が返す結果は異なるので注意。

$x('string(//div/text())')
# => まとめ
$x('string(//div/.)')
#=> まとめ
#   Xpathについて
#   Xpathとは、XML Path Languageの略で...
#   © ... Co., Ltd. ALL Rights Reserved.

その他特殊な属性の指定

disabled

<input type="button" value="次" disabled/>
$x('//input[@disabled]')

selected

<select name="type">
  <option value="1">1</option>
  <option value="2" selected>2</option>
</select>
$x('//option[@selected]')

複数条件指定

and でつなげる。

<input type="button" value="送信" class="hoge"/>
$x('//input[@class="hoge" and @value="送信"]')

など、他にもいろいろな指定方法があるので、一度いろいろ検索してみるのをおすすめする。