在存储在变量中的 XML 上运行 Xpath(获取"Uncaught TypeError: undefined is not a function")



我正在尝试使用 和 Xpath 表达式计算存储在变量中的 XML,但我收到控制台错误"未捕获的类型错误:未定义不是函数" JSFiddle

$(document).ready(function () {
    var data = '<books><book><title>ABC</title><author>Smith, John</author><subject>Science Fiction</subject></book><book><title>DEF</title><author>Jones, Tom</author><subject>Biography</subject></book></books>';
                var title = data.evaluate('//books/book[1]/title', data, null, XPathResult.ANY_TYPE, null);
                alert(title);
});

首先,评估方法是文档对象的成员,因此需要调用document.evaluate(...)

其次,contextNode 参数(您在其中发送数据字符串(需要是一个 DOM 节点。 一个简单的解决方法是将数据参数包装在jquery对象中,并从中获取DOM节点。

这应该有效:

$(document).ready(function () {
     var data = '<books><book><title>ABC</title><author>Smith, John</author><subject>Science Fiction</subject></book><book><title>DEF</title><author>Jones, Tom</author><subject>Biography</subject></book></books>';
     var title = document.evaluate('//books/book[1]/title', $(data).get(0), null, XPathResult.ANY_TYPE, null);
                alert(title);
});

这是一个更新的小提琴:

http://jsfiddle.net/c91fja0h/2/

更新

若要获取返回节点的实际文本,需要将 XPathResult 从 ANY 更改为 ANY_UNORDERED_NODE_TYPE,然后需要访问返回对象的 innerText 属性。

更新的代码:

$(document).ready(function () {
    var data = '<books><book><title>ABC</title><author>Smith, John</author><subject>Science Fiction</subject></book><book><title>DEF</title><author>Jones, Tom</author><subject>Biography</subject></book></books>';
                var title = document.evaluate('/books/book[1]/title', $(data).get(0), null, XPathResult.ANY_UNORDERED_NODE_TYPE, null);
                alert(title.singleNodeValue.innerText);
});

更新的小提琴:http://jsfiddle.net/c91fja0h/3/

最新更新