以下のようなXML文書に対して、
<?xml version="1.0" encoding="utf-8" ?> <root xmlns="http://example.com/foo"> <foo>test</foo> </root>
次のようにXPathでfoo要素を取り出そうとすると、
var ns = { lookupNamespaceURI : function(prefix) { return "http://example.com/foo"; }}; xml.evaluate('/root/foo', xml, ns, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
取り出せない。
デフォルト名前空間を指定しているから大丈夫だろうと思いきや、そうは問屋が卸さず。次のように、prefixをつけてあげたら取り出せた。
var ns = { lookupNamespaceURI : function(prefix) { if(prefix == "foo") return "http://example.com/foo"; else return ""; }}; xml.evaluate('/foo:root/foo:foo', xml, ns, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
これでだいぶ時間を無駄にしてしまった。