我們使用XSLT生成我們的數據報告。數據當前以XML文檔形式存儲在Oracle中(不使用XMLTYPE,而使用正常的CLOB)。我們選擇正確的XML文檔,並創建一個單一的文件:非常大的文件上的XSLT轉換
<DATABASE>
<XMLDOCUMENT> ... </XMLDOCUMENT>
<XMLDOCUMENT> ... </XMLDOCUMENT>
...
</DATABASE>
在某些情況下,完整的XML文檔中包含100000頁的文件。這意味着一個巨大的XML文檔首先被加載到內存中,導致各種內存問題。
我們如何防止這種情況發生?我們在.NET 2.0中使用XslCompiledTransform
類。
我知道有兩種解析XML文檔的形式:DOM和SAX。但據我所知,SAX方式不可能與XSLT結合使用。 DOM解析方法迫使我們將整個東西加載到內存中。
我們有什麼選擇?首先將整個文檔寫入磁盤有幫助嗎? Oracle是否在大型XSLT轉換方面做得更好?
XMLDOCUMENT內容有多複雜? XSLT轉換有多複雜?也許值得將XSLT改爲更輕的重量? – 2009-11-06 21:01:49
問題是我們打算將其用作通用報表引擎。不知道XSLT的複雜程度如何。它可以是簡單的CSV導出,也可以是平均值等的計算。 – 2009-11-08 12:23:53
SAX可用作一些XSLT處理器的輸入,例如。撒克遜[http://saxon.sourceforge.net/]。但是,在一般情況下,XSLT處理器將構建整個數據的內部表示,這些數據將隨着輸入數據的大小在內存中線性增長。有可能使用特定於給定處理器的優化以流模式運行轉換。另一種解決方案可能是限制所選元素的數量並在數次處理數據。您可能還需要通過多個步驟切換轉換。 – 2009-11-13 17:17:06