首页 > 解决方案 > IE11 中的 XPath 位置轴

问题描述

IE11 是否不喜欢 XPath 查询中的位置轴?我正在尝试在该浏览器中运行以下命令:

DOMDocument.selectNodes('//library/ancestor::stores')

IE11给我的错误是

Expected token 'eof' found ':'.

//library/ancestor-->:<--:stores

Chrome等浏览器没问题,IE11哭得像个婴儿?我一直在四处寻找,除了模糊地暗示浏览器可能正在使用旧版本的 MSXML 之外,真的找不到发生这种情况的原因。我可以做些什么来让它在那个浏览器中工作吗?如果没有,是否有可以使用的替代轴?

编辑:我想指出一件事——问题不一定与 xpath 查询是否有效有关。IE11 不是在抱怨查询的有效性,而是在抱怨“::”位置轴。

谢谢,
克里斯托夫

标签: internet-explorerxpath

解决方案


该问题与您在 IE 中使用的 MSXML 版本有关。如果您使用 MSXML 3.0,它将使用旧的 XSLPattern 语言作为会导致问题的查询语言。

作为一种解决方法,您可以使用默认使用 XPath 语言的 MSXML 6.0。IE 11 中的工作示例如下所示。我的books.xml与此示例相同。:

<!DOCTYPE html>
<html>
<body>

    <p id="demo"></p>

    <script>      
        var txt = "";
        var xmlDoc = new ActiveXObject("MSXML2.DOMDocument.6.0"); //use MSXML 6.0
        xmlDoc.async = false;
        xmlDoc.load("books.xml");
        var nodes = xmlDoc.selectNodes('/bookstore/book/child::title');
        for (i = 0; i < nodes.length; i++) {
            txt += nodes[i].childNodes[0].nodeValue + "<br>";
        }
        document.getElementById("demo").innerHTML = txt;
    </script>

</body>
</html>

如果您使用的是 MSXML 3.0,则可以使用如下所示的SelectionLanguage 属性。它也适用于 IE 11:

var xmlDoc = new ActiveXObject("MSXML.DOMDocument");
xmlDoc.setProperty("SelectionLanguage", "XPath");

推荐阅读