【发布时间】:2020-08-31 01:38:44
【问题描述】:
我看过很多帖子说 DOM4J 只支持 XPath 1.0。我有一些使用 DOM4J 的实用程序现在被要求支持一些使用 XPath 2.0 功能的动态参数。有人知道如何扩展 DOM4J 以支持 XPath 2.0 的示例吗?可能与它一起使用 SAXON(再次任何示例或文档)?
【问题讨论】:
我看过很多帖子说 DOM4J 只支持 XPath 1.0。我有一些使用 DOM4J 的实用程序现在被要求支持一些使用 XPath 2.0 功能的动态参数。有人知道如何扩展 DOM4J 以支持 XPath 2.0 的示例吗?可能与它一起使用 SAXON(再次任何示例或文档)?
【问题讨论】:
您可以针对 DOM4J 文档树使用 Saxon XPath 引擎。如果您想要“开箱即用”此功能,则需要 Saxon-PE 或 -EE 许可证;但是如果你想自己构建它,源代码是可用的。
您可以使用 JAXP XPath 接口(只需提供 JAXP 要求 Object 的 DOM4J 文档节点),或使用 Saxon 的 s9api 接口:创建一个 net.sf.saxon.s9api.DocumentBuilder 并调用其 wrap() 方法来包装DOM4J 文档为XdmNode。查询结果将以XdmNode 对象的形式返回; XdmNode.getExternalNode() 将返回底层 DOM4J Node。
【讨论】:
在线示例位于 Saxon 存储库中,此处为 Saxon 9.7 HE 的 https://saxonica.plan.io/projects/saxon/repository/he/revisions/master/entry/latest9.7/samples/java/he/S9APIExamples.java#L970,因为它是“仅”支持 XPath 2.0 的最新版本,而较新的版本(9.8 及更高版本)将支持 XPath 3.1。
【讨论】: