0

回避策が見つからない単純な問題があり、あなたの助けが必要です。

主な問題は、入力 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

この解決策も無効のようです。

だから私の質問はこれです:この単純な問題をどのように実装できますか? さまざまな場所からデータを収集し、変換の最後にファイルに書き込みます。

サクソンを使っています。

4

1 に答える 1

1

入力の構造ではなく、出力の構造に従ってコードを構造化する必要があります。入力内の情報に遭遇したときに何かをしようとしないでください。出力の関連部分を生成する必要がある場合は、それらを実行してください。

同じ入力を複数回訪問することを意味するため、これが非効率的に見える場合があります。通常、これらの非効率性は現実のものではなく明らかなものです。しかし、最初に行うことは、変換を機能させることです。それが十分に速くない場合は、別の質問で私たちに戻ってくることができます.

于 2013-07-18T20:54:59.460 に答える