在存储在变量中的xml上运行Xpath(获取" Uncaught TypeError:undefined不是函数")

时间:2014-12-13 22:09:29

标签: javascript jquery xpath

我尝试使用和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);
});

1 个答案:

答案 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);
});

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