具有名称空间的XML文档中的Javascript XPath

时间:2019-09-25 14:18:56

标签: javascript xpath xml-namespaces

我遇到了一个非常简单的XPath的问题,但无法弄清楚为什么它不起作用。

当我搜索带有名称空间的元素时,它的作用就像一个超级按钮,但是却使用了“默认”名称空间(不知道确切的用语)。

 var xmlString = `<?xml version="1.0" encoding="utf-8"?>
                  <h:html xmlns="http://www.w3.org/2002/xforms" xmlns:h="http://www.w3.org/1999/xhtml">
                    <h:ok>OK</h:ok>
                    <ko>KO</ko>
                  </h:html>`;


var doc = new DOMParser().parseFromString(xmlString, 'text/xml');
var rootNode = doc.documentElement;
var evaluator = new XPathEvaluator();
var resolver = evaluator.createNSResolver(rootNode);

var result1 = doc.evaluate('//h:ok', rootNode, resolver, XPathResult.ANY_TYPE, null);
var result1Next = result1.iterateNext();
alert(result1Next ? result1Next.innerHTML : 'not found'); // Works !

var result2 = doc.evaluate('//ko', rootNode, resolver, XPathResult.ANY_TYPE, null);
var result2Next = result2.iterateNext();
alert(result2Next ? result2Next.innerHTML : 'not found'); // Fail !

我做了一个小提琴(http://jsfiddle.net/1bon769r/)。

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

最后,我找到了适合我的用例的解决方法。

我使用'local-name()'查找没有任何命名空间条件的元素。

感谢#19438596