我印象深刻的是,所有最新的浏览器现在都使用XPath 2。当我使用lower-case()和uppser- case()(版本2中引入的功能)时,Chrome抛出语法错误。但是,它们较旧的替代方法translate()效果很好。
lower-case()
uppser- case()
translate()
这是错误还是最新的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"]')
不,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()都会产生类似的错误。
current-date()
除了此类探针之外,没有内置的方法来确定XPath实现的版本。
另一方面,XSLT system-property('xsl:version')可以确定版本1.0与版本2.0。
system-property('xsl:version')