XPathとはhtmlやxmlの要素を特定するための書式です。木のように枝分かれしているタグの中から目的のタグを指定するために使います。
XPathの表現
まずXPath表現のよく使うものをまとめました。木構造の各タグのある位置をノードNodeと呼びます。一番上部のノードはトップノードと言います。htmlであれば<HTML>タグがこれにあたります。
書式 | 意味 |
---|---|
// | トップノードから見てどこかい存在するタグ |
@ | 属性名を表す接頭辞 |
[ ] | タグの詳細を示すブロック |
= | 条件式に使う等号 |
text() | タグに設定されているテキスト |
contains(p1, p2) | p1の中にp2の値を含む場合trueを返す |
and | [ ]内の複数判定をand条件にする |
or | [ ]内の複数判定をor条件にする |
( ) | andやorの判定順序を指定するのに使う |
.. | 一つ上のノード |
* | タグ名に使うワイルドカード |
これだけだとわかりにくいので実際の例を書いておきます。
//a
トップノードから下のどこかにあるaタグのあるノードを意味します。htmlのアンカータグ、リンクタグと呼ばれるものです。具体的には閉じるタグまでをノードと呼ぶので以下全体が指定されていると考えます。
<a href='http://url'>こちら</a>
aタグが複数ある場合はこれだと特定できません。もう少し指定をします。
//a[@class]
これはaタグのうちclassという名前の属性が指定されているものを指します。以下のようなものが取得できます。ただclass属性をもつaタグが他にもある場合は指定が必要です。
<a class='a-class' href='http://url'>こちら</a>
以下のように書くとclass属性が’a-class’のものを指定することができます。
//a[@class=’a-class’]
以下のようにするとタグに囲まれているテキストを指定することができます。ここではリンクテキストが’こちら’のものを指定しています。
//a[text()=’こちら’]
以下のように書くとandで条件指定することができます。
//a[@class=’a-class’ and text()=’こちら’]
ただしこの場合テキストが’こちら’と全く同じでなくてはいけません。例えば’こちらをクリック’などは指定できません。’こちら’という文字を含むものを指定するには以下のようにします。
//a[@class=’a-class’ and contains(text(),’こちら’)]
一つ上のノードにより見分けたい場合は .. を使います。例えば以下のようなときはaタグは全く同じで指定できません。
<div class='div1'> <a class='a-class' href='http://url'>こちら</a> </div> <div class='div2'> <a class='a-class' href='http://url'>こちら</a> </div>
この場合は一つ上のノード(親ノードと呼びます)のクラス属性の値を指定します。
//a[@class=’a-class’ and ../@class=’div2′]
aタグとbタグのどちらかを指定したい場合はワイルドカードをorを使います。
//*[name()=’a’ or name()=’b’]
次回ブラウザでこういった表現が正しいか検証する方法を見ます。