Internet Explorer中的DOM Level 3 XPath

Max*_*Art 32 internet-explorer xpath msxml xmldom dom3

我刚安装IE10在我的Windows 7,而且我发现,即使我很高兴,从AJAX请求个XML现在可以兼容DOM文档,就像一个相当基本的功能document.evaluate仍然不支持.

更糟糕的是,由于这些个XML是不是定制的微软IXMLDocument对象,节点不支持selectNodesselectSingleNode了.最后,似乎IE10不支持DOM Level 3 XPath或MSXML Xpath.

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

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

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

try {xhr.responseType = "msxml-document";} catch(e) {}
Run Code Online (Sandbox Code Playgroud)

如规定在这里,但我认为这将是很好对付,最后,在IE标准DOM文档了.

那么,有没有办法在IE10中使用带有标准DOM文档的XPath?

更新2013年6月26日 IE11尚未稳定,但仍然不支持document.evaluate.如果它不支持它在稳定的版本,我怀疑它会永远支持它.毋庸置疑,这是荒谬的.

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

幸运的是(如果可以这么说),你仍然可以设置xhr.responseType = "msxml-document".有那么一刻,我担心你再也不能那样做了......

更新23/11/2013 IE11现在稳定,但遗憾的是,它不支持document.evaluate.随着重量级XML文档在Web应用程序中越来越少地使用JSON或其他光表示法格式,这变得不那么成问题了,但仍然如此.

设置responseType属性仍然提供遗留的XML文档,所以我猜没有丢失.不过,我不知道IE12是否会成立.

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

Pet*_*ček 15

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

对我document.evaluate来说,遗憾的是,通过库可以在每个浏览器中使用最可靠的方式.

它被称为Wicked Good XPath,它是最近谷歌撰写的旧的JavaScript-XPath库的重写.自发布以来,我一直在使用Wicked Good XPath,并且对它非常满意(好吧,不像本机XPath支持那么多,但仍然如此).

  • @Slanec确实,但是你从AJAX获得的XML请求到IE9,MSXML文件和节点有这些方便的`.selectNodes`和`.selectSingleNode`你可以在`document.evaluate`的(部分)位置使用.从IE10开始,默认响应文档不再是MSXML文档,因此这些方法已经消失.无论如何,你的回答听起来不错,如果没有更好的答案会在几天内出现,我会接受. (3认同)

Pau*_*tte 5

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

IE浏览器开发渠道,有一个内置您可以用它来进行预览:

它在内部使用了:

为了在不污染网页上下文的情况下支持WGX,我们创建了一个专用于WGX的独立,独立的脚本引擎.通过对WGX的一些修改,它们提供了调用函数和访问结果的入口点,我们将数据从页面封送到隔离引擎并使用WGX计算表达式.通过启用WGX来处理本机XPath查询,我们可以看到网站在我们的新引擎中丢失内容以立即获得现代Web

目前,MSDN有一个迁移指南,建议如下:

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

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

参考