【发布时间】:2016-05-21 00:05:30
【问题描述】:
据我了解,SAXON 是唯一在 Java 中支持 XPath 3.0 的库。 它的 JAXP 实现只支持 XPath 2.0。 它的 XPath 3.0 实现应该被称为 this way 并且要求我首先使用它自己的 API 构建文档,而不是使用像 DOM4J 这样的兼容 JAXP 的 API。
这很痛苦,因为我一直小心地将使用 XPath 的所有内容抽象为以 JAXP 节点和 xpath 字符串作为参数的代理接口,但如果我必须重构所有内容以使用 SAXON 节点,这似乎毫无意义自上而下。
我是不是误会了什么?有没有更不痛的方法?
【问题讨论】:
-
Java 中有各种 XQuery 3.0 实现,而 XPath 3.0 是 XQuery 3.0 的子集。至于 JAXP,我不知道 BaseX 或 eXist 是否公开了该 API。至于 Saxon,为什么您认为 Saxon 和 JAXP 可以实现 XPath 2.0,而 XPath 3.0 不行?我认为这两个版本都可能导致 JAXP 无法处理的结果,但总的来说,我没有看到对 XPath 2.0 的限制。 JAXP 非常适合 XPath 1.0,这使得使用想要返回节点集或单个原语 val 的 API 难以获得丰富类型系统和节点的原子值序列
-
我已经尝试了 Saxon 9.7 HE 和 JAXP XPath 以及一些使用 XPath 3.0 和 3.1 功能(如
!或let或json-to-xml)的示例表达式,它们工作正常。 HE 不支持高阶函数或内联函数等某些功能,但在 EE 中可以使用。