【问题标题】:xpath with dom document带有 dom 文档的 xpath
【发布时间】: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>

这段代码有什么问题?

【问题讨论】:

    标签: javascript xml dom xpath document.evaluate


    【解决方案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有更详细的解释

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-01
        • 2018-02-19
        • 1970-01-01
        • 2012-09-28
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多