【问题标题】:DOM Level 3 XPath in Internet ExplorerInternet Explorer 中的 DOM 级别 3 XPath
【发布时间】:2016-09-07 00:29:52
【问题描述】:

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

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

说真的,微软?我有什么遗漏吗?

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

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

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

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

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

UPDATE 26/7/2013 IE11 还不稳定,但它仍然不支持document.evaluate。如果它在稳定版本中不支持它,我怀疑它会永远支持它。不用说这是可笑的。

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

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

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

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

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

【问题讨论】:

  • 哇!只是谷歌了一下,你可能会有所收获。这将成为 #9678 没有人应该使用 IE 的原因!
  • 我认为querySelector/All 在 IE9 中支持
  • @torazaburo querySelector/All 支持 CSS 选择器语言。 XPath 是一种(更强大的)语言,用于选择/分析 *ML 文档中的节点。这篇文章的重点是质疑 XML 文档的跨浏览器选择器语言的存在。
  • 我知道querySelector/All 是什么以及XPath 是什么。我只是指您帖子中的声明“但在 IE9 及更低版本中不受支持”。这是不正确的。它应该是“IE8 及更低版本”。我并不是说这会对这个问题或您的答案产生有意义的影响。
  • 感谢您定期更新此问题的状态!

标签: internet-explorer xpath msxml xmldom dom3


【解决方案1】:

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

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

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

【讨论】:

  • 还是?在这个问题中,听起来好像以前有 XPath 支持并且已经停止。
  • @O.R.Mapper 据我所知,没有任何 IE 版本支持 document.evaluate(或任何其他在 DOM 文档上选择的 XPath)。
  • @Slanec 确实,但是您从 AJAX 请求到 IE9 的 MSXML 文档中获得的 XML,并且节点有这些方便的 .selectNodes.selectSingleNode 您可以在(部分)位置使用document.evaluate。从 IE10 开始,默认的响应文档不再是 MSXML 文档,所以这些方法都没有了。无论如何,您的回答听起来不错,如果几天后没有更好的答案出现,我会接受。
  • 试试这个网站:llamalab.com/js/xpath 他们有一个 15k 的缩小版本和一个演示页面来测试他们的脚本。效果很好。
【解决方案2】:

它是 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:

参考文献

【讨论】:

  • 哇,就在我失去希望的时候。当它的用处每天都在下降时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
相关资源
最近更新 更多