Java JAXP XSLT document()函数问题

Java JAXP XSLT document()函数问题,java,xml,xslt,xalan,jaxp,Java,Xml,Xslt,Xalan,Jaxp,我在使用XSLT转换的java应用程序下工作。我在其中有很多document()调用,所以可能会有java.lang.OutOfMemory异常(我实际上有),因为每次调用document()函数后,文档都会被缓存 当时我读到有可能 增加堆内存大小,这在我的情况下不是解决方案。我还尝试使用增量转换,这似乎不受支持 那么,在使用document()函数时,是否有可能关闭jaxp中的文档缓存?您提供的链接包含一个使用自定义处理指令禁用缓存的示例。你试过那里建议的解决方法了吗 如果你有选择的话 只需将

我在使用XSLT转换的java应用程序下工作。我在其中有很多document()调用,所以可能会有java.lang.OutOfMemory异常(我实际上有),因为每次调用document()函数后,文档都会被缓存

当时我读到有可能 增加堆内存大小,这在我的情况下不是解决方案。我还尝试使用增量转换,这似乎不受支持


那么,在使用document()函数时,是否有可能关闭jaxp中的文档缓存?

您提供的链接包含一个使用自定义处理指令禁用缓存的示例。你试过那里建议的解决方法了吗

如果你有选择的话

只需将Xalan与Saxon交换,一切都会快得多,并且可以显著减少内存消耗

据我所知,Xalan将把文档加载到内存中,除非在最新版本中有所更改

Saxon具有流模式:


希望这会有所帮助。

像user1066037的答案一样,希望您可以切换到Saxon。Saxon有一个扩展名为
Saxon:discard document
。可在PE或EE版本或Saxon-B中找到。请在此处搜索“Saxon-B”:

从Saxon文档中:

saxon:discard-document() saxon:discard document($doc as document-node())==>document-node()

此函数用于从Saxon的内部文档池中删除文档。 该文档暂时保留在内存中,但将被删除 当所有引用 文档树中的“到”节点已超出范围。这有 释放内存的好处是,但缺点是如果 在同一转换过程中再次加载文档,它将 从源文本重新解析,并将使用不同的节点标识符 分配。该函数返回作为提供的文档节点 参数,允许在调用中使用,例如 select=“saxon:discard document(document('a.xml'))”

如果您需要一个如何使用
saxon:discard document
的示例,请告诉我,我可以发布一个