回避策が見つからない単純な問題があり、あなたの助けが必要です。
主な問題は、入力 XML の処理中に、さまざまな場所で情報を「収集」する必要があることです。これは、私が本当にしなければならないことは、次のようなパラメーターを使用して特別なテンプレートを呼び出すことだけであることを意味します。
<xsl:template name="append-section">
<xsl:param name="id" />
<xsl:param name="title" />
<!-- more code here -->
</xsl:template>
このテンプレートが XSLT プロシージャ中に 12 回呼び出されたとします。変換の最後に、このデータをファイルに書き込みたいと思います。
このデータをグローバル変数に追加して、結果をファイルに書き込もうとしました。変数が実際には XSLT の変数ではないことを理解するためだけに。この解決策はうまくいきませんでした。
2 番目の解決策は、1 つの一時ファイルで xsl:result-document を使用することでした。このソリューションは、常にファイルの以前のコンテンツをそれ自体にコピーするだけでなく、次のような新しいデータを追加するようなことを行います。
<xsl:template name="append-section">
<xsl:param name="id" />
<xsl:param name="title" />
<xsl:result-document method="html" href="tmp/tmp.html">
<xsl:value-of select="document(tmp.html)" />
<xsl:element name="li">
<xsl:element name="a">
<xsl:attribute name="class">
<xsl:value-of select="'so-dropdown-page-menu-list-button'" />
</xsl:attribute>
<xsl:attribute name="href">
<xsl:value-of select="'#'" />
<xsl:value-of select="$id" />
</xsl:attribute>
<xsl:value-of select="$title" />
</xsl:element>
</xsl:element>
</xsl:result-document>
</xsl:template>
このコードは完璧ではないかもしれませんが、残念ながら次の例外がスローされたことに気付きました。
Cannot write more than one result document to the same URI
この解決策も無効のようです。
だから私の質問はこれです:この単純な問題をどのように実装できますか? さまざまな場所からデータを収集し、変換の最後にファイルに書き込みます。
サクソンを使っています。