(私はプロトコルを怒らし、私を困らかもしれない一般的な戦略の質問を危険にさらすしてみましょう。)XSLT 1.0予備処理戦略
HTMLへの私の入力XMLの要素ごとの変換前に、私は順序を決定する必要があります要素が提示されます。そうするためには、提示される要素の属性に基づいて、順序付きリストをマージし、グラフをトレースすることを含む再帰的分析が必要です。
この処理の後、実際には属性値の順序付きリストがあり、そのリストでソートされた要素を提示します。
どちらの方針が良いですか?
1)属性値のリストとなり、グローバル変数、に事前分析の結果を入れて、そのリストを反復、このような何か:
<xsl:variable name=orderOfPresentation>
<xsl:call-template name="analyses">
</xsl:variable>
<xsl:template match="root">
<xsl:for-each select="$orderOfPresentation">
<xsl:apply-templates select="/" />
</xsl:for-each>
</xsl:template>
または
2)、再帰を閉じることなく、このような何かを命じたリストが決定された後の分析、深いテンプレートの書式を適用:
<xsl:template match="root">
<xsl:call-template name="analysis">
[with, as parameters, various sets of attribute nodes, extracted from the input XML]
</xsl:call-template>
</xsl:template>
<xsl:template name="analysis">
[recursions that include calls to sub-analysis]
</xsl:template>
<xsl:template name="sub-analysis">
[recursions that include calls to sub-sub-analysis]]
</xsl:template>
<xsl:template name="sub-sub-analysis">
[more work, which eventually produces an ordered list, $orderOfPresentation]
<xsl:for-each select="$orderOfPresentation">
<xsl:apply-templates select="/" />
</xsl:for-each>
</xsl:template>
F最初の戦略は、手続き型言語プログラマの考えを明らかにするだけかもしれませんが、実際の変換のビジネスに乗り出す前に、プロセッサがそれ自体を後にするようにする利点があるようです。
しかし、XLST 1.0(拡張機能なしで動作しなければならない)では、文字列値のリストを表す簡単な方法がなく、(これを正しく理解すれば)グローバル変数に戻すことしかできません木の断片(私が理解していない何か)。だから戦略(1)は悪いようです。
しかし、(2)は、すべての実際の変換を再帰の内側から深く呼び出す戦略は、非効率的で維持が難しいようです。
これらの戦略の1つがベストプラクティスですか?それとも、どちらも混乱した心の証拠ですか?
XSLTプロセッサの呼び出し元の環境はどのように見えますか?ソートのために最初のXSLTプログラムを適用し、結果のXMLをどこかに保存し、これを "XMLからHTMLへ"変換する2番目のXSLTプログラムで処理する機会はありますか?これは私がここで試してみるものです。 –
変換はクライアント側でWebブラウザで実行されています。だから、中間XMLを保存することはできません。 – JPM
まあ、私はJavaScriptについてよく知らないけど、JavaScriptを使って提案したことをすることはできないのですか?この例のhttp://www.w3schools.com/xsl/xsl_client.aspは、XSLTプロセッサを2回実行するために簡単に変更できるようです。 –