我尝试使用和Xpath表达式来评估存储在变量中的XML,但是我收到了控制台错误"未捕获的TypeError:undefined不是函数" 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);
});
答案 0 :(得分:1)
首先,evaluate方法是文档对象的成员,因此您需要调用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);
});