NULL::something

Login via flickr, はてな, TypeKey.

2006-03-13

JSXPath

前々からいちいちあのクソながったらしい evaluate を書くのがだるかったのでちゃんと関数はさむようにした。

大きなバグがあります。詳細はXPath, $X function, NSResolverに書きました。以下のコードは非推奨です。

Inserted at 2006-03-16T23:19:09+09:00

$X = function (exp, context) {
    if (!context) context = document;
    var result = document.evaluate(exp, context, null, XPathResult.ANY_TYPE, null);
    switch (result.resultType) {
        case XPathResult.STRING_TYPE : return result.stringValue;
        case XPathResult.NUMBER_TYPE : return result.numberValue;
        case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
        case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
            result = document.evaluate(exp, context, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
            var ret = [];
            for (var i = 0, len = result.snapshotLength; i < len ; i++) {
                ret.push(result.snapshotItem(i));
            }
            return ret;
        }
    }
    return null;
}

alert($X("//p")); // Array of p elements
alert($X("count(//node())")); // => node number
alert($X("count(//body) = 1")); //=> must be true

// Firefox が嫌いになる GM スクリプト
if ($X("contains(string(/), 'Firefox')")) {
    alert("I LOVE FIREFOX!");
}

これでコピペ地獄から開放される。

Comments (0)

Trackback URI: http://lowreal.net/logs/2006/03/13/3.trackback

NULL

RSS feed meter for http://lowreal.net/logs/latest

Alternates

  1. RSS 1.0
  2. Atom 1.0

Generated with Taglibro

この日記は Taglibro と呼ばれる XML ベースの XSLT をテンプレートとして使ったシステムを使っています。現在の Taglibro は Ruby, ruby-xslt, libxml-ruby による実装です。ソースコードはとりあえず公開していません。