大きなxmlファイルを操作する場合、RAMがないためにfopが機能しなくなります(私の場合は1.7GBが制限です)。したがって、これを修正する方法の1つは、ここで説明するように複数のページシーケンスオブジェクトを使用することです。ただし、それらの使用方法の説明はありません...そして、for-eachを使用して新しいページシーケンスオブジェクトを「作成」しようとしましたが、失敗したようで、1.7GBに達するとフォブが故障します。とにかくラム
<xsl:template match="OurForm">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:call-template name="layout_master_template"/>
<xsl:for-each select="document"> //Hopefully this creates a new page-sequence object, doesn't it?
<fo:page-sequence master-reference="page" initial-page-number="1" force-page-count="no-force">
<fo:flow flow-name="xsl-region-body">
<fo:block xsl:use-attribute-sets="pageBlock">
<xsl:call-template name="MainTemplate">
<xsl:with-param name="PageCount" select="0"/>
</xsl:call-template>
</fo:block>
</fo:flow>
</fo:page-sequence>
</xsl:for-each>
</fo:root>
</xsl:template>
MainTemplateは数百のレコードを取得し、それらをテーブルに出力します...
XML:
...
<document>
records
</document>
...
900 documents
...
<document>
records
</document>
for-eachは、xmlから新しいドキュメントを取得するたびに新しいページシーケンスオブジェクトを作成しますか?そして、このメモリの問題をどのように修正しますか?