JS の XPath
前々からいちいちあのクソながったらしい evaluate を書くのがだるかったのでちゃんと関数はさむようにした。
大きなバグがあります。詳細はXPath, $X function, NSResolverに書きました。以下のコードは非推奨です。
$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!");
} これでコピペ地獄から開放される。
関連エントリー
- XPath, $X function, NSResolver JS の XPath なんて書きましたけど、重大なバグがありまして、っていうかなんで気がつかなかったんだろう、えーそれは applicati...
- XPath1.0 いろいろ一覧 last(), number position(), number count(node-set), number id(obj), num...
- 結果ツリーフラグメントの誤解 2004年12月の指向性メモ で言及されてるのを読んでもう一度仕様書を読み直してみる。 Variables introduce an add...
- ruby-xslt undefined reference to 何度やってもできない。わけわかんないです。-lxml2 -lxslt ついてますよ? /lib に libxslt.dll.a libxml...
- Benchmark.js の結果表示を改善する Benchmark.js ちゃんと使えるので良いのですが、計測を頑張っている割に結果表示が貧弱というのが悲しいところです。 なので Perl...