32

我刚刚在我的 Windows 7 上安装了 IE10,我注意到,即使我很高兴来自 AJAX 请求的 XML 现在是兼容的 DOM 文档,但仍然document.evaluate不支持一个相当基本的功能。

更糟糕的是,由于这些 XML不是自定义的 Microsoft对象,因此IXMLDocument节点不再支持。最后,IE10 似乎不支持 DOM Level 3 XPath 或 MSXML Xpath。selectNodesselectSingleNode

认真的,微软?有什么我想念的吗?

当然,我可以使用querySelectorand querySelectorAll,但我不想失去相当多的向后兼容性。

否则,仍然可以使用这一行请求 MSXML 文档

try {xhr.responseType = "msxml-document";} catch(e) {}

如此处所述,但我认为最后在 IE 中处理标准 DOM 文档也会很好。

那么,有没有办法在 IE10 中将 XPath 与标准 DOM 文档一起使用?

更新 26/7/2013 IE11 还不稳定,但它仍然不支持document.evaluate. 如果它在稳定版本中不支持它,我怀疑它是否会支持它。不用说这是荒谬的。

我知道你可以在 DOM 节点中使用querySelector/ All,但它在 IE9 及更低版本中不支持,它仍然很常用,而且无论如何 XPath 比选择器更强大。

幸运的是(如果你可以这么说的话),你仍然可以设置xhr.responseType = "msxml-document". 有那么一瞬间,我怕你再也做不到了……

更新 23/11/2013 IE11 现在很稳定,但遗憾的是,它不支持document.evaluate. 随着重量级 XML 文档在 Web 应用程序中越来越少地使用 JSON 或其他轻量级符号格式,这已不再是一个问题,但仍然存在。

设置responseType属性仍然提供遗留的 XML 文档,所以我猜什么都不会丢失。不过,我不知道这是否会适用于 IE12。

2015 年 8 月 15 日更新现在听起来很荒谬,但 Edge 现在支持document.evaluate. 就在(几乎)一切都切换到 JSON 进行数据交换的时候。好吧,我想,迟到总比没有好。

4

2 回答 2

15

是的,IE =/ 中仍然没有 XPath 支持。

对我来说,可悲的是,在每个浏览器中使用最可靠的方法document.evaluate是通过库。

它被称为Wicked Good XPath,它是最近由 Google 编写的对旧的优秀JavaScript-XPath库的重写。自发布以来,我一直在使用 Wicked Good XPath,并且对它非常满意(嗯,不如原生 XPath 支持多,但仍然如此)。

于 2012-11-23T10:30:12.067 回答
5

它是 Microsoft Edge build 10240+ 的一部分:modern.ie: DOM Level 3 XPath

IE Dev Channel有一个构建版本,您可以使用它来预览它:

它在内部使用

为了在不污染网页上下文的情况下支持 WGX,我们创建了一个单独的、隔离的脚本引擎,专用于 WGX。通过对 WGX 进行一些修改,为调用函数和访问结果提供入口点,我们将数据从页面编组到隔离引擎并使用 WGX 评估表达式。启用 WGX 以处理本机 XPath 查询后,我们看到在我们的新引擎呈现现代 Web 中缺少内容的网站立即获得收益

目前,MSDN 有一个迁移指南,其中推荐以下内容:

通常,除非您需要 XPath/XSLT 等功能,否则请尝试迁移到本机对象和 API;这可以通过将 responseText 传递给 DOMParser 来完成,而不是使用 responseXML var:

如果仍然需要 MSXML API,可以更新功能检查以验证接收到的节点类型,以便选择正确的 API:

参考

于 2014-03-12T20:44:12.127 回答