私のプロジェクトには、XML形式でデータベースからデータを収集し、XSLTを実行してユーザーが希望するレポート形式を生成するレポートモジュールがあります。この時点でのオプションはHTMLとCSVです。Xalan XSLT - メモリ不足ヒープスペース
私たちはJavaとXalanを使用して、データとのやりとりをすべて行います。
悪い点は、ユーザーが要求できるこれらのレポートの1つが、XML部分だけで143MB(約430,000レコード)であることです。これをHTMLに変換すると、ヒープスペースがなくなり、ヒープ用に最大4096Gが確保されます。これは受け入れがたい。
問題は単にデータが多すぎるようですが、顧客を制限し、機能要件を満たすことができない場合よりも、これに対処するより良い方法があると考えることはできません。
私は必要に応じてより多くの情報を提供してうれしいですが、私はあなたが大部分を理解していると確信しているので、私はプロジェクトについてあまり詳しく説明することはできません。また、答えはイエスです。私は同時にすべてのデータを必要とします:私はそれを改ページすることはできません。私が使用しています
おかげ
EDIT
すべての変換クラスが持つjavax.xml.transformパッケージに含まれています。実装は次のようになります。
final Transformer transformer =
TransformerFactory.newInstance().newTransformer(
new StreamSource(new StringReader(xsl)));
final StringWriter outWriter = new StringWriter();
transformer.transform(
new StreamSource(new StringReader(xml)), new StreamResult(outWriter));
return outWriter.toString();
可能であれば、私はXSLTをそのままにしておきたいと思います。 StreamSource
の処理方法では、処理されるデータの一部をGCに渡す必要がありますが、XSLT(関数など)の制限が適切なクリーンアップを行うために必要なことがわかりません。誰かが私にこれらの制限を詳述するリソースを教えてもらえると、非常に役に立ちます。
さらに、XSLTの最新バージョンには、ストリーミング機能が含まれています。http://www.w3.org/TR/xslt-21/#streaming-concepts。私はそれを自分で試していない。 –
サクソンも[ストリーミング]をサポートしています(http://saxonica.blogharbor.com/blog/_archives/2006/7/4/2084120。html)、あなたがこのモードのために書くことができるXSLTはより制限されています。さらに議論がある[ここ](http://stackoverflow.com/a/460906/523391)。 – prunge
はい、それは私が言及していた2.1バージョンのXSLTの追加です。表現力を制限することは、ストリーミングするためにおそらく必要です。 –