【问题标题】:custom nodeinfo implementation with saxon 97 - HE使用 saxon 97 实现自定义 nodeinfo - HE
【发布时间】:2017-01-09 18:26:37
【问题描述】:

我有一个用 saxon 8.7 编写的自定义 NodeInfo、DocumentInfo 和 ExternalObjectModel 实现。

我还需要支持一些自定义函数。 我的理解是 saxon 9.7 HE 有更好的支持,所以尝试从基于 8.7 的实现迁移到 9.7 HE。

  1. 有没有办法关闭 xslt 功能?我暂时不需要它。

s9api 是获得以下功能的推荐 api:

  • 使用自定义数据模型(我没有 xml 文档)
  • 支持 自定义函数
  • 为 current() 提供自定义实现 功能

当前的实现有这种模式。

     XPathEvaluator eval = new XPathEvaluator(docw);
     eval.setNamespaceContext(new NamespaceContext() {
        // stripped off
     });
     List<DataNode> res = eval.evaluate(xpath);

现在,XPathEvaluator 不接受“NodeInfo”实现器。 评估返回一个字符串。

9.7 中相关的新 api/类是什么?

此外,没有 saxon-xpath。我认为该功能现在是 Saxon-HE 的一部分。

【问题讨论】:

    标签: saxon


    【解决方案1】:

    在 8.7 和 9.7 之间发生了很大变化——您说的是相隔大约 10 年的两个版本,其中有 10 个主要版本,可能还有 100 个维护版本。虽然在任何两个主要版本之间对 NodeInfo 接口的更改都非常小,但它们会随着时间的推移累积到显着的差异。

    Saxon 9.7 更改了 DocumentInfo 接口,将其(实际上)替换为新的 TreeInfo 对象,以保存有关树的信息,无论根节点是否为文档节点。

    诸如“9.7 中的新 api/类是什么”之类的问题过于宽泛。我们在每个主要版本中发布详细的更改信息,在线交互式文档具有更改历史记录,允许您按类别列出任何两个选定版本之间的更改。 8.7 和 9.7 这两个版本相距甚远,这是一个很长的列表,甚至没有必要在这里开始总结。

    saxon-xpath 曾经是一个单独的 JAR 文件,我认为原因可能是您可以将其保留在类路径之外,以避免 JAXP 应用程序意外拾取它。该功能现在位于主 JAR 文件中 - 除了 Saxon 不再将自己宣传为 JAXP XPath 提供程序,以避免此问题。

    我通常会向任何编写 Saxon 应用程序的人推荐使用 s9api 接口,尤其是当他们需要超越 XSLT、XPath、XSD 和 XQuery 时。 JAXP 等价物更加混乱:它们不能很好地跨工具集成,它们通常不是类型安全的,它们不提供对最新 W3C 标准中的功能的访问,等等。但是如果你正在进行深度集成,例如定义你自己的对象模型和替换系统函数,那么你将不得不在 s9api 之下挖掘内部低级 API。

    这里有很多可能,但从一个版本到下一个版本并不是 100% 稳定的,而且它并不总是有很好的文档记录。我们很乐意回答技术问题,但如果您处理此类集成,我们希望您具备高水平的技术能力。

    【讨论】:

    • 理解和欣赏。我将尝试使用 s9 api,看看我能取得多大的进步。我们非常感谢您的贡献。
    猜你喜欢
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2019-02-09
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多