10

我正在尝试使用 xpath 查询查找 xml 节点。但我不能让它工作。在 Firefox 中,结果总是“未定义”,chrome 会抛出错误代码。

<script type="text/javascript">

var xmlString = '<form><name>test</name></form>';
var doc = new DOMParser().parseFromString(xmlString,'text/xml');

var result = doc.evaluate('/form/name', doc, 
                          null, XPathResult.ANY_TYPE, null);

alert(result.stringValue);

</script>

这段代码有什么问题?

4

2 回答 2

12

我不知道您为什么会收到此错误,但是您可以更改XPathResult.ANY_TYPEXPathResult.STRING_TYPE并且可以正常工作(在 firefox 3.6 中测试)。

看:

var xmlString = '<form><name>test</name></form>';
var doc = new DOMParser().parseFromString(xmlString,'text/xml');
var result = doc.evaluate('/form/name', doc, null, XPathResult.STRING_TYPE, null);
alert(result.stringValue); // returns 'test'

jsfiddle


细节:

方法的第四个参数evaluate是一个整数,您可以在其中指定您需要什么样的结果(参考)。有许多类型,如整数、字符串和任何类型。此方法返回一个XPathResult,它具有许多属性。

您必须将属性 (numberValue, stringValue) 与评估中使用的属性匹配。

I just don't understand why any type didn't work with string value.

于 2010-08-29T21:51:39.250 回答
3

XPathResult.ANY_TYPE would return a node set for xpath expression /form/name, so result.stringValue would have trouble converting node set to string. In this case you could use result.iterateNext().textContent

However, an expression like count(/form/name) would return a number value when used with XPathResult.ANY_TYPE and you could use result.numberValue to retrieve the number in that case.

Some more detailed explanation at https://developer.mozilla.org/en/DOM/document.evaluate#Result_types

于 2012-04-14T02:14:38.087 回答