谷歌浏览器是否使用XPath 2.0?

26

我曾经认为所有最新的浏览器都已经支持XPath 2了。当我使用版本2中引入的lower-case()upper-case()函数时,Chrome会抛出语法错误。然而,它们的旧版本替代方案translate()却可以正常工作。

这是一个bug还是最新版的Chrome实际上使用的是XPath 1?有没有命令/方法来查找XPath版本?

// Finds the element as expected.
$x('//h2/text()[. = "Delete"]') 

// Doesn't find the element (also expected).
$x('//h2/text()[. = "delete"]') 

// SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//h2/text()[lower-case(.) = "delete"]' is not a valid XPath expression.
$x('//h2/text()[lower-case(.) = "delete"]')

可能是什么浏览器支持Xpath 2.0?的重复问题。 - Richard
我看到了16658799。你仔细读了答案吗?先做这个,然后再重新读我的回答… - Ian Bytchek
没有一个“大型”浏览器使用XPath 2。这就是答案。简单明了。 - Arran
2个回答

25

不,Chrome使用XPath 1.0。

您可以将XPath表达式简化为仅使用v2.0函数来验证此内容:

$x("lower-case('ABC')")
SyntaxError: Failed to execute 'evaluate' on 'Document': The string 'lower-case('ABC')' is not a valid XPath expression.

尝试使用任何其他XPath 2.0函数,例如current-date(),都会产生类似的错误。

除了这些探测方法之外,没有内置的确定XPath实现版本的绝对方法。

另一方面,XSLT有system-property('xsl:version')用于确定版本1.0与2.0。


2
答案展示了如何检查,但是2017年仍然适用于Chrome v55:仅支持XPath 1.0,不支持XPath 2.0。 - kjhughes
2
仍然适用于2018年11月。 - Betlista
6
2019年8月,Chrome 76仍然是这种情况。 - ShockwaveNN
13
2020年5月,新冠疫情封锁期间问候您!Chrome 81仍未提供支持。 - Eric
2
这太糟糕了。为什么还不支持呢?我得写丑陋的xpath代码才能进行简单的区分大小写搜索。编辑: 显然,这永远不会得到支持 https://github.com/whatwg/dom/issues/903#issuecomment-707748069 - andromeda
显示剩余3条评论

12

这是一篇来自StackOverflow的仍然有效的链接,涉及到libxml2未实现XPath 2.0的问题。链接地址为:https://dev59.com/M4Pba4cB1Zd3GeqPy-2t#26164535。 - kjhughes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接