言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Safari で XPath

ふと所用があり XPath についてメモ。

XPath というのは XML から特定の部分を抜き出すために使うミニ言語。Javascript について来るのでブラウザで使えるし、他の言語でもライブラリがある。Safari で実験する場合。Develop - Error Console でコンソールを開ける。

> result = document.evaluate("//div", document, null, XPathResult.ANY_TYPE, null);
XPathResult
> result.iterateNext()
<div id="simple-header">
> result.iterateNext()
...

書式

document.evaluate(XPATH式, 調べ始めのノード, 名前空間用関数, 欲しい型, 結果オブジェクト);

普通の HTML 全体を処理する場合。

  • 調べ始めのノード = document
  • 名前空間用関数 = null
  • 欲しい型 = XPathResult.ANY_TYPE
  • 結果オブジェクト = null

でよい。結果は XPathResult オブジェクトが返るので、iterateNext() で値を取得する。

例: タイトルを取り出す。

> document.evaluate("//title/text()", document, null, XPathResult.STRING_TYPE, null).stringValue
言語ゲーム (山宮隆の日記)

例: P タグの数を数える。

> document.evaluate("count(//p)", document, null, XPathResult.NUMBER_TYPE, null).numberValue
51

例: http: を含むアンカータグ

> document.evaluate("//a[contains(@href, 'http:')]", document, null, XPathResult.ANYE, null).iterateNext()
<a href="http://www.hatena.ne.jp/">

参考

しかしミニ言語のくせにこの仕様のでかさは凄いな。