(Web API > Document)
https://developer.mozilla.org/ja/docs/Web/API/Document/evaluate
var result = document.evaluate(
xpath,
contextNode,
namespaceResolver,
resultType,
result
);
Document インターフェイスの evaluate() メソッドは、パラメータで指定された XPath 式に基づいて要素を選択する。
XPath 式は、HTML ドキュメントと XML ドキュメントの両方で評価する。
引数
- xpath:評価される xpath を表す文字列(XPathは、XML文書内のノードを選択するための言語)
- contextNode:クエリのコンテキスト ノード ( XPath specification を参照)。 document をコンテキスト ノードとして渡すのが一般的
- namespaceResolver:任意の名前空間プレフィックスが渡され、そのプレフィックスに関連付けられた名前空間 URI を表す文字列を返す関数。基本はnullで問題ない
- resultType:XPathResult が返す結果のタイプに対応する整数。定数で指定する(※下記の表を参照)
- result:既存のXPathResultオブジェクトを再利用する場合はそれを指定するらしいが、通常そんな事しないのでnull
定数 | 値 | 戻り値で使用するプロパティ及びメソッド |
---|---|---|
ANY_TYPE | 0 | 種類を問わず自動判別して全て返す |
NUMBER_TYPE | 1 | 数値として返す(count関数で得た結果など) |
STRING_TYPE | 2 | 文字列として返す(string関数で得た結果など) |
BOOLEAN_TYPE | 3 | Boolean値として返す(not関数で得た結果など) |
UNORDERED_NODE_ITERATOR_TYPE | 4 | 全てのノードを返す(必ずしも文書と同じ順序とは限らない) |
ORDERED_NODE_ITERATOR_TYPE | 5 | 全てのノードを返す(文書と同じ順序) |
UNORDERED_NODE_SNAPSHOT_TYPE | 6 | 全てのノードのスナップショットを返す(必ずしも文書と同じ順序とは限らない) |
ORDERED_NODE_SNAPSHOT_TYPE | 7 | 全てのノードのスナップショットを返す(文書と同じ順序) |
ANY_UNORDERED_NODE_TYPE | 8 | 1つのノードを返す(必ずしも文書と同じ順序とは限らない最初のノード) |
FIRST_ORDERED_NODE_TYPE | 9 | 1つのノードを返す(文書と同じ順序) |
※ノードとスナップショットの違い
ノードは、得たノードが何かしら変更された場合、得たノードは変更された結果となるが、スナップショットは得たノードの変更があっても、得たノードは変更されない。
<div id="main">
<p class="content">
<a class="link" href="http://kenjimorita.jp">
1st Link
</a>
<p class="dummy"></p>
<p class="content">
<a href="http://example.com/">2link</a>
</p>
<p class="content">
<a href="http://example.com/">3link</a>
</p>
<a href="http://example.com/">5th</a>
</div>
// idがmainのdiv、classにcontentを含むp要素の3番目hrefが
// http://example.comから始まるa要素を辿り「3link」を出力する
var result = document.evaluate(
'//div[@id="main"]/p[contains(@class,"content")][3]/a[starts-with(@href,"http://example.com")]',
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
console.log(result.snapshotLength); //1
var elem = result.snapshotItem(0);
console.log(elem.innerHTML);