簡體   English   中英

JAXP XSLT document()函數問題

[英]JAXP XSLT document() function problem

我在使用XSLT轉換的java應用程序下工作。 我有很多document()調用,所以有可能有java.lang.OutOfMemory異常(我實際上有),因為每次調用document()函數后都會緩存文檔。

http://xml.apache.org/xalan-j/faq.html#faq-N102F9,我讀到可以增加堆內存大小,這在我的情況下不是解決方案。 我也嘗試使用似乎不支持的增量變換。

那么,有沒有可能在使用document()函數時關閉jaxp中的文檔緩存?

與user1066037的答案一樣,希望你可以切換到Saxon。 Saxon有一個名為saxon:discard-document的擴展名saxon:discard-document 它可以在PE或EE版本或Saxon-B中使用。 在這里搜索“Saxon-B”: http//saxon.sourceforge.net/

來自撒克遜文件:

撒克遜:丟棄文檔()

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

此函數從Saxon的內部文檔池中刪除文檔。 該文檔暫時保留在內存中,但是當文檔樹中對節點的所有引用都超出范圍時,Java垃圾收集器將從內存中釋放該文檔。 這具有釋放內存的好處,但缺點是如果在同一轉換期間再次加載相同的文檔,則將從源文本中重新分配它,並且將分配不同的節點標識符。 該函數返回作為參數提供的文檔節點,允許在調用中使用它,例如select =“saxon:discard-document(document('a.xml'))”。

如果您需要一個如何使用saxon:discard-document的示例saxon:discard-document ,請告訴我,我可以發布一個。

您提供的鏈接包含使用自定義處理指令禁用緩存的示例。 您是否嘗試過那里建議的解決方法?

如果你有選擇。

只需將Xalan與Saxon交換,一切都會快得多,你可以大大減少內存消耗。

據我所知,Xalan 會將文檔加載到內存中,除非在最新版本中有所改變。

Saxon有流媒體模式: http//www.saxonica.com/documentation/sourcedocs/streaming/streaming-templates.xml

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM