使用 dom4j 将 XPath 3.0 添加到代码库的最轻松的方法
Most pain-free way to add XPath 3.0 to a codebase using dom4j
据我了解,SAXON 是 Java 中唯一支持 XPath 3.0 的库。
它的 JAXP 实现只支持 XPath 2.0。
它的 XPath 3.0 实现应该称为 this way 并且要求我首先使用它自己的 API 构建文档,而不是使用像 DOM4J 这样的符合 JAXP 的 API。
这很痛苦,因为我一直小心地将所有使用 XPath 的东西抽象到以 JAXP 节点和 xpath 字符串作为参数的代理接口,但如果我必须重构所有东西以使用 SAXON 节点,这似乎毫无意义从上到下。
我是不是误会了什么?有没有比较痛苦的方法?
我越来越多地鼓励用户使用 s9api API 而不是 JAXP 来进行 XPath 处理。原因有很多种:JAXP 接口只对 DOM 以外的树模型提供非常半心半意的支持;它确实与 XPath 2.0 和现在的 3.0 的扩展类型系统作斗争,在 Saxon 的情况下,它与其他 XML 技术和 APIs.
但是,Saxon 继续支持 JAXP XPath API,尽管它存在所有局限性,既针对它自己的树模型,也针对第三方树模型,例如 DOM4J。
我们放弃的一件事是对 XPath 服务接口的支持,如果它在类路径上,使用 XPathFactory.newInstance() 方法的应用程序将选择 Saxon。这样做的原因是,当您编写应用程序时,您确实需要知道您需要 XPath 1.0 还是 2.0 处理器,而 JAXP 机制无法让您说出您想要哪个,也无法发现您已经获得了哪个。结果是许多应用程序在使用不正确的类路径部署时遇到难以诊断的故障。如果您希望 Saxon 作为您的 JAXP XPath 提供者,您现在必须明确要求它。
如果您能更具体地说明您正在尝试做什么,以及它是如何失败的,那将很有用。
据我了解,SAXON 是 Java 中唯一支持 XPath 3.0 的库。 它的 JAXP 实现只支持 XPath 2.0。 它的 XPath 3.0 实现应该称为 this way 并且要求我首先使用它自己的 API 构建文档,而不是使用像 DOM4J 这样的符合 JAXP 的 API。
这很痛苦,因为我一直小心地将所有使用 XPath 的东西抽象到以 JAXP 节点和 xpath 字符串作为参数的代理接口,但如果我必须重构所有东西以使用 SAXON 节点,这似乎毫无意义从上到下。
我是不是误会了什么?有没有比较痛苦的方法?
我越来越多地鼓励用户使用 s9api API 而不是 JAXP 来进行 XPath 处理。原因有很多种:JAXP 接口只对 DOM 以外的树模型提供非常半心半意的支持;它确实与 XPath 2.0 和现在的 3.0 的扩展类型系统作斗争,在 Saxon 的情况下,它与其他 XML 技术和 APIs.
但是,Saxon 继续支持 JAXP XPath API,尽管它存在所有局限性,既针对它自己的树模型,也针对第三方树模型,例如 DOM4J。
我们放弃的一件事是对 XPath 服务接口的支持,如果它在类路径上,使用 XPathFactory.newInstance() 方法的应用程序将选择 Saxon。这样做的原因是,当您编写应用程序时,您确实需要知道您需要 XPath 1.0 还是 2.0 处理器,而 JAXP 机制无法让您说出您想要哪个,也无法发现您已经获得了哪个。结果是许多应用程序在使用不正确的类路径部署时遇到难以诊断的故障。如果您希望 Saxon 作为您的 JAXP XPath 提供者,您现在必须明确要求它。
如果您能更具体地说明您正在尝试做什么,以及它是如何失败的,那将很有用。