JAXP XSLT document函数问题

问题描述

| 我正在使用XSLT转换的Java应用程序下工作。我有很多document()调用,因此可能有java.lang.OutOfMemory异常(我实际上有),因为在每次调用document()函数之后都会缓存该文档。 在http://xml.apache.org/xalan-j/faq.html#faq-N102F9,我读到有可能 增加堆内存大小,这不是我的解决方案。我也尝试使用似乎不受支持的增量转换。 因此,在使用document()函数时,是否有可能在jaxp中关闭文档缓存?     

解决方法

        像user1066037的答案一样,希望您可以切换到Saxon。撒克逊语的扩展名为
saxon:discard-document
。在PE或EE版本或Saxon-B中都可用。在此处搜索\“ Saxon-B \”:http://saxon.sourceforge.net/ 从撒克逊人的文档中:   撒克逊人:discard-document()      saxon:discard-document($ doc as document-node())==> document-node()      此功能从Saxon的内部文档库中删除文档。   该文档暂时保留在内存中,但是将会   当所有引用被Java垃圾收集器从内存中释放时   文档树中的节点已超出范围。这有   释放内存的好处,但缺点是如果相同   在相同的转换过程中再次加载文档,它将   从源文本中重新解析,然后将使用不同的节点标识符   已分配。该函数返回作为提供的文档节点   一个参数,允许将其用于诸如   选择= \“ saxon:discard-document(document(\'a.xml \'))\”。 如果您需要使用
saxon:discard-document
的示例,请告诉我,我可以贴一个。     ,        您提供的链接包含使用自定义处理指令禁用缓存的示例。您是否尝试过建议的解决方法?     ,        如果您有选择的话。 只需将Xalan与Saxon交换,一切都会更快,并且您可以显着减少内存消耗。 据我所知,除非在最新版本中进行了某些更改,否则Xalan会将文档加载到内存中。 撒克逊人拥有流媒体模式:http://www.saxonica.com/documentation/sourcedocs/streaming/streaming-templates.xml 希望能有所帮助。