我最近一直在使用 XPath,并且一直在寻找有关哪些浏览器支持 XPath 2.0 的信息,但运气不佳。我能找到的最好的是各种渲染引擎的查询技术比较表。
这清楚地告诉我 Firefox 和 IE(两者的所有版本)都不支持 XPath 2.0,但是 Chrome、Safari 等的其他渲染引擎呢?有没有人有这方面的任何信息或知道在哪里可以找到它?
我最近一直在使用 XPath,并且一直在寻找有关哪些浏览器支持 XPath 2.0 的信息,但运气不佳。我能找到的最好的是各种渲染引擎的查询技术比较表。
这清楚地告诉我 Firefox 和 IE(两者的所有版本)都不支持 XPath 2.0,但是 Chrome、Safari 等的其他渲染引擎呢?有没有人有这方面的任何信息或知道在哪里可以找到它?
我不知道,官方的实现列表也不包括一个。
另一种选择——当然性能不如原生实现——是XQIB,它是 JavaScript 中的 XQuery 实现。XPath 2.0 作为一个子集完全包含在 XQuery 1.0 中,因此您将能够在所有支持 JavaScript 的浏览器中使用所有 XPath 2.0 特性(以及更多特性)。
从他们的网站上获取的关于如何使用它的简短示例:
<script type="text/javascript" src="mxqueryjs/mxqueryjs.nocache.js"></script>
<script type="application/xquery">
b:alert(
let $x := <a><b>2</b><c>4</c></a>
return xs:string($x/b * $x/c)
)
</script>
大多数浏览器不支持 XPATH 2.0,请参阅布局引擎比较以获取更多信息。
但是,您可以通过使用Saxon-CE在 Firefox 中获得对 XPATH 2.0 的支持,请参阅MDN XSLT_2.0 页面上的更多信息。
还有Saxon CE,一个 XSLT 2.0 的开源 Javascript 实现。由于 XSLT 2.0 包含 XPath 2.0,因此它在浏览器中提供了 XPath 2.0 实现。但是它不是内置的。
我刚刚尝试了当前版本的 Safari (7.0.6),它不接受我给它的 XPath 2.0 函数:
> document.evaluate("starts-with('foo', 'f')", document.documentElement, null,
XPathResult.BOOLEAN_TYPE, null);
< XPathResult
> document.evaluate("ends-with('foo', 'o')", document.documentElement, null,
XPathResult.BOOLEAN_TYPE, null);
< Error: INVALID_EXPRESSION_ERR: DOM XPath Exception 51
所以我想说 WebKit(特别是 JS 引擎,SquirrelFish / Nitro)目前不支持 XPath 2.0。
2020 年 8 月更新:Saxon-CE 的当前继任者是 Saxon-JS 2,它支持 XPath 3.1。
在 JavaScript 中有一个开源 XPath 2.0 实现,也被包装为一个jQuery XPath 插件。