据我所知,SAXON是唯一支持Java中XPath 3.0的库。 它的JAXP实现仅支持XPath 2.0。 它的XPath 3.0实现应该被称为this way,并且要求我首先使用自己的API构建文档,而不是使用像DOM4J这样的JAXP兼容的API。
这是一个痛苦,因为我小心翼翼地将使用XPath的所有内容抽象为代理接口,将JAXP节点和xpath字符串作为参数,但如果我必须重构所有内容以使用SAXON节点,这似乎毫无意义。自上而下。
我误解了什么吗?有一种不太痛苦的方式吗?
答案 0 :(得分:1)
我越来越多地试图鼓励用户使用s9api API优先于JAXP进行XPath处理。原因有很多:JAXP接口只对DOM以外的树模型提供非常半心的支持;它真的很难与XPath 2.0和现在3.0的扩展类型系统斗争,而在Saxon的情况下,它与其他XML技术和API完全没有互操作性。
然而,Saxon继续支持JAXP XPath API及其所有局限性,无论是针对自己的树模型还是针对第三方树模型(如DOM4J)。
我们放弃的一件事是支持XPath服务接口,使用XPathFactory.newInstance()方法的应用程序将获取Saxon,如果它在类路径上。原因是你真的需要知道你在编写一个应用程序时是否需要一个XPath 1.0或2.0处理器,而JAXP机制让你无法说出你想要的东西,或者发现你得到了哪个。结果是,当使用不正确的类路径部署时,许多应用程序遇到难以诊断的故障。如果你想让Saxon成为你的JAXP XPath提供者,你现在必须明确地要求它。
如果你可以更具体地了解你想要做什么,以及它是如何失败的,那将是有用的。