我最近一直在使用XPath,并一直在寻找有关哪些浏览器支持XPath 2.0而没有太多运气的信息.我能找到的最好的是各种渲染引擎的查询技术比较表.
这清楚地告诉我Firefox和IE(两者的所有版本)都不支持XPath 2.0,但是Chrome,Safari等的其他渲染引擎呢?有没有人有这方面的信息或知道哪里可以找到它?
我正在查看https://en.wikipedia.org/wiki/XPath_2.0,我惊讶地发现现代浏览器引擎不支持 XPath 2.0。我已经成功地使用了 XPath 2.0 函数,例如Chrome 中的substring-after 和 ,matches没有太多问题,但根据官方文档,这不应该被支持,因为它不是 XPath 1.0 的一部分。
兼容浏览器引擎列表是否已过时,或者我遗漏了什么?有人知道为什么 2007 年发布的这么旧的规范仍然不受支持吗?
有谁知道在XML :: LibMXL中实现了哪个版本的XPath规范?
或者更重要的是,在哪里可以找到我可以在LibXML中使用的XPath函数的描述?
例如,我尝试过类似的东西
$dcDOM->findvalue('//dc:identifier[contains(@xsi:type,"URI")]');
Run Code Online (Sandbox Code Playgroud)
这看起来很好,但是
$dcDOM->findvalue('//dc:identifier[matches(@xsi:type,"URI")]');
Run Code Online (Sandbox Code Playgroud)
才不是.
从那一点开始,我们必须假设它最多支持XPath 1.0或1.0/2.0的某个子集.
是否有一个整洁的页面列出和描述了所有内容?
因此,我的系统中有一个员工的XML文档:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<couriersystem title="System"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schema.xsd">
<!-- snip -->
<employees>
<employee eid="1">
<nin>AZ123518D</nin>
<firstname>Peter</firstname>
<lastname>Smith</lastname>
<gender>Male</gender>
<dob>1994-02-11</dob>
<email>ps11@gmail.com</email>
<address>
119, London Street, Nidrie, F57 8NE
</address>
<tel>07005748900</tel>
<salary>30526</salary>
<empbranch bid="1" />
<supervisor sid="1" />
</employee>
<employee eid="2">
<nin>CN174869F</nin>
<firstname>Jennifer</firstname>
<lastname>Black</lastname>
<gender>Male</gender>
<dob>1984-12-24</dob>
<email>jb21@gmail.com</email>
<address>
161, South Road, Nidrie, W79 8WG
</address>
<tel>07555111222</tel>
<salary>40576</salary>
<empbranch bid="2" />
<supervisor sid="1" />
</employee>
<employee eid="3">
<nin>ET127654M</nin>
<firstname>Aaron</firstname>
<lastname>Jones</lastname>
<gender>Male</gender>
<dob>1968-03-15</dob>
<email>aj31@gmail.com</email>
<address>
66, High Road, Yoker, Q47 4SR
</address>
<tel>07856471267</tel> …Run Code Online (Sandbox Code Playgroud) 当我们看到一致性图表时,例如https://caniuse.com/#search=xpath和https://developer.microsoft.com/en-us/microsoft-edge/platform/status/domlevel3xpath/?q=xpath,它通常是关于DOM Level 3 XPath 的,重点是使用 XPath 1.0访问 DOM 对象,但不一定是 XPath 3.0 或更高版本。
问题 1 - W3C 等对浏览器是否有明确的版本要求以支持较新版本的 XPath?
此 XPath 1.0 功能有效:
document.evaluate(
'normalize-space(" X ")',
document, null, XPathResult.ANY_TYPE, null ).stringValue
// => "X"
Run Code Online (Sandbox Code Playgroud)
但是这个 XPath 3.0 内联函数功能 ( ref ) 会抛出:
document.evaluate(
'let $incr := function($n as xs:integer) as xs:integer { $n +1 } return $incr(2)',
document, null, XPathResult.ANY_TYPE, null ).stringValue
Run Code Online (Sandbox Code Playgroud)
边缘:
XPATH15001:不支持 XPath 查询“let $incr := function($n as xs:integer) as xs:integer …