首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAXP XSLT document()函数问题

JAXP XSLT document()函数问题
EN

Stack Overflow用户
提问于 2011-06-15 11:35:50
回答 3查看 730关注 0票数 5

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

http://xml.apache.org/xalan-j/faq.html#faq-N102F9上,我看到增加堆内存大小是可能的,而在我的情况下,这不是解决方案。我还尝试使用似乎不受支持的增量转换。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-25 17:52:51

就像answer 1066037的答案一样,希望您可以切换到Saxon。撒克逊有一个名为saxon:discard-document的扩展。它可以在PE版、EE版或Saxon版中获得。搜索“撒克逊-B”在这里:http://saxon.sourceforge.net/

来自撒克逊的文档:

saxon:discard-document()

撒克逊:废弃文档($doc作为文档节点()) ==>文档-节点()

此函数从Saxon的内部文档池中删除文档。文档暂时保留在内存中,但是当所有对文档树中节点的引用超出范围时,Java垃圾收集器将从内存中释放。这具有释放内存的好处,但缺点是,如果同一个文档在相同的转换过程中再次加载,则将从源文本对其进行重新分析,并分配不同的节点标识符。函数返回作为参数提供的文档节点,允许在调用(如select="saxon:discard-document(document('a.xml'))". )中使用该节点。

如果您需要一个如何使用saxon:discard-document的示例,请让我知道,我可以发布一个。

票数 2
EN

Stack Overflow用户

发布于 2011-06-15 12:49:26

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

票数 1
EN

Stack Overflow用户

发布于 2011-11-25 17:26:46

如果你有选择的话。

只要用Saxon交换Xalan,一切都会快得多,您可能会显著减少内存消耗。

据我所知,Xalan将把文档加载到内存中,除非在最新的版本中做了一些更改。

撒克逊有流模式:http://www.saxonica.com/documentation/sourcedocs/streaming/streaming-templates.xml

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6357091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档