Document.evaluate()

(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_TYPE0種類を問わず自動判別して全て返す
NUMBER_TYPE1数値として返す(count関数で得た結果など)
STRING_TYPE2文字列として返す(string関数で得た結果など)
BOOLEAN_TYPE3Boolean値として返す(not関数で得た結果など)
UNORDERED_NODE_ITERATOR_TYPE4全てのノードを返す(必ずしも文書と同じ順序とは限らない)
ORDERED_NODE_ITERATOR_TYPE5全てのノードを返す(文書と同じ順序)
UNORDERED_NODE_SNAPSHOT_TYPE6全てのノードのスナップショットを返す(必ずしも文書と同じ順序とは限らない)
ORDERED_NODE_SNAPSHOT_TYPE7全てのノードのスナップショットを返す(文書と同じ順序)
ANY_UNORDERED_NODE_TYPE81つのノードを返す(必ずしも文書と同じ順序とは限らない最初のノード)
FIRST_ORDERED_NODE_TYPE91つのノードを返す(文書と同じ順序)

※ノードとスナップショットの違い
ノードは、得たノードが何かしら変更された場合、得たノードは変更された結果となるが、スナップショットは得たノードの変更があっても、得たノードは変更されない。

<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);
inserted by FC2 system