ふと所用があり 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/">
参考
- https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript
- JavaScript-XPath をリリースしました!さあ、あなたも XPath を使おう! http://d.hatena.ne.jp/amachang/20071112/1194856493
- パスの例: http://www.w3.org/TR/xpath/#location-paths
- 使える関数: http://www.w3.org/TR/xquery-operators/
しかしミニ言語のくせにこの仕様のでかさは凄いな。