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