3

我通常使用 JDK (JDK 7) 中的 XSLT 支持来进行 XSLT 转换。最近我遇到了一个相当大的 XML 文档,并且对它应用 XSLT 转换(即使是非常基本的转换)会导致使用大量内存。

我一直小心翼翼地进行所有处理流式处理,但似乎 JDK 中的 XSLT 引擎(似乎是经过修改的 Xalan)总是首先在内存中构建 DOM。显然这不是我想要的。

现在我发现单独提供的 Xalan(2007 年的 2.7.1!)确实有一个用于进行增量转换的 API。因此,虽然这似乎确实有效,但我实际上希望我的代码在股票 JDK 上运行,而不告诉用户摆弄任何认可的文件夹。

在 Java 中进行增量 XSLT 转换以使我的代码与未修改/库存 JDK 安装兼容的最佳方法是什么?

更新:这个最近更新的问题密切相关:什么是最高效的基于 Java 的流式 XSLT 处理器?

4

2 回答 2

2

你试过saxon:stream()撒克逊的扩展吗?

于 2012-06-04T12:07:17.073 回答
2

首先,我强烈建议使用 Xalan 和 Xerces 的 Apache 版本,而不是捆绑在 JDK 中的版本,因为它们有很多错误。对于 Xerces 来说尤其如此。

其次,如果您使用的是 Java,那么您真的应该转向 XSLT 2.0,它可以极大地提高开发效率。在实践中,这意味着撒克逊(撒克逊家庭版是免费的)。

Xalan 中的增量转换实际上并没有阻止它将整个源文档构建为内存中的树。它所做的只是允许树与转换过程并行构建。如果您想要进行流式转换,Saxon-EE 是您唯一实用的选择。(请注意,saxon:stream() 扩展只是 Saxon 提供的流媒体功能的一小部分)。

于 2012-06-04T17:14:22.300 回答