我正在尝试使用 和 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/