XSLTCを使って変換する場合,次の条件がすべて重なるスタイルシートでは繰り返し処理される回数に比例してメモリ使用量が増加します。最大の繰り返し処理回数を想定してメモリ設計をしてください。
- <xsl:variable>や<xsl:param>で変数やパラメタに次のどちらかを設定している。
・結果ツリーフラグメント(select属性ではなく,要素内容として書かれたテンプレートによって定義される値) ・ノードセット
- 1.が繰り返し処理される。
例1:変数に結果ツリーフラグメントを設定した例
<xsl:for-each select="/ns1:root/ns1:Data">
<xsl:variable name="V1">
<xsl:element name="RTF_ROOT" namespace="">
<xsl:copy-of select="." />
</xsl:element>
</xsl:variable>
<xsl:element name="ELE1" namespace="">
<xsl:copy-of select="$V1" />
</xsl:element>
</xsl:for-each> 例2:パラメタに結果ツリーフラグメントを設定した例
<xsl:template match="/">
<xsl:for-each select="/ns1:root/ns1:Data">
<xsl:call-template name="t2">
<xsl: with-param name="P1">
<xsl:element name="RTF1" namespace="">
<xsl:copy-of select="." />
</xsl:element>
</xsl: with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="t2">
<xsl:param name="P1"/>
<xsl:element name="ELE1" namespace="">
<xsl:copy-of select="$V1" />
</xsl:element>
</xsl:template> 例3:変数にノードセット(document()関数を使用して異なるXML文書を読み込む)を設定した例
<xsl:for-each select="/ns1:root/ns1:Data">
<xsl:variable name="V1" select="document(@refdoc)"/>
<xsl:element name="ELE1" namespace="">
<xsl:copy-of select="$V1/*" />
</xsl:element>
</xsl:for-each> |