JavaScriptでXpathを取得するサンプルコード

JavascriptでXpathを取得することができたのでサンプルコードを公開しておきます。

スポンサーリンク

JavascriptでXpathをとるサンプルコード

とりあえずXpathをとるコードを一挙公開。

javascript : (function (d) {
    document.getElementsByXPath = function(expression, parentElement) {
    var r = []
    var x = document.evaluate(expression, parentElement || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
    for (var i = 0, l = x.snapshotLength; i < l; i++) {
      r.push(x.snapshotItem(i))
    }
    return r
    }
    function l() {
        (function ($) {
            var obj = $(document.getElementsByXPath(' here xpath ')).text();
            alert(obj);
        })(jQuery)
    }
    if (typeof jQuery == 'undefined') {
        var j = d.createElement('script');
        j.type = 'text/javascript';
        j.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
        d.body.appendChild(j);
        j.onload = l
    } else {
        l()
    }
})(document);

※わたしはプログラマーではありませんので、こんなコードをいちから書くことはできません。しかし、ネット上に散らばっている情報をああでもないこうでもないで組み立てていくと動くようになりました。こちらのコードを解説できるのほどの腕も頭ももっていないのですが、とりあえずわかる部分だけ言及していこうと思います。

次の見出しに続きます

document.getElementsByXPathについて

2行目のdocument.getElementsByXPathはユーザー定義関数になります。ですので、document.getElementById()のようにJavascriptにもともとそなわっている関数ではありません。document.getElementsByXPathの関数内でなにをやっているかまではわたしはわかりません。しかしこの関数はXPathの要素を戻り値として返すようです。

この関数は「Javascript XPath 取得」と検索して一番はじめにでてきたページでコードが公開されていました。

その他の構文について

その他の構文についてはとくにかわったことはしていませんが、document.getElementsByXPathを定義しましたので、こちらを使うときは引数にXPathをもたせるようにします。ここで→「XPathとはなんですか?」という疑問がわくかもしれませんが詳しいことは XML Path Language – Wikipedia をみていただけるとよいかと思います。正直な事を言えばXPathとはなにかという問いはあまり重要ではありません。

その他に何か言えるとすれば上記のようにJqueryの関数が使えるということでしょうか?

スポンサーリンク

なぜXPathなのか?

JavascriptでなぜわざわざXPathを使うのかという問いがあるかもしれません。Javascriptにはdocument.getElementByIddocument.getElmentsByClassNameなどの関数(メソッド)があらかじめ用意されています。これらのメソッドをつかうことで要素を取得することができます。

しかしまれにclassやidが指定されていないhtml要素が存在するのです。そのときにどうしたものかということで使えるのがXPathになります。ただ、これは個人的な見解であり、これが通常のやり方がどうかはわたしはわかりません。

この記事の情報は以上になります。

参考サイト: 【Javascript】XPathを使う(document.evaluate) at softelメモ

コメント

タイトルとURLをコピーしました