XPath与DOM文档的使用方法

12

我正在尝试使用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>
这段代码有什么问题?
2个回答

14
我不知道你为什么会出现这个错误,但是你可以将XPathResult.ANY_TYPE更改为XPathResult.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)与 evaluate 中使用的属性进行匹配。

我只是不明白为什么“任何类型”无法与“字符串值”一起使用。


3
XPathResult.ANY_TYPE会返回xpath表达式/form/name的节点集,因此result.stringValue在将节点集转换为字符串时会出现问题。在这种情况下,您可以使用result.iterateNext().textContent
但是,像count(/form/name)这样的表达式在使用XPathResult.ANY_TYPE时会返回一个数字值,您可以使用result.numberValue来检索该数字。
更详细的解释请参见https://developer.mozilla.org/en/DOM/document.evaluate#Result_types

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接