带有 dom 文档的 xpath
Posted
技术标签:
【中文标题】带有 dom 文档的 xpath【英文标题】:xpath with dom document 【发布时间】:2011-04-05 12:35:56 【问题描述】:我正在尝试使用 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>
这段代码有什么问题?
【问题讨论】:
【参考方案1】:我不知道您为什么会收到此错误,但您可以将 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
的第4个参数是一个整数,你可以指定你需要什么样的结果(reference)。有很多types,如整数、字符串和任何类型。这个方法返回一个XPathResult,它有很多属性。
您必须将属性 (numberValue, stringValue) 与评估中使用的属性匹配。
我只是不明白为什么 any type
不能与 string value
一起使用。
【讨论】:
【参考方案2】: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有更详细的解释
【讨论】:
以上是关于带有 dom 文档的 xpath的主要内容,如果未能解决你的问题,请参考以下文章