2009-04-10 9 views
6

XSLT for-eachの使用を避ける方法についてもう一度お話します。それは追放されるべきあなたの内面的なプログラミングの悪魔だということです。xsl:for-eachについてはどうして悪いですか?

何が悪いですか?

このベストプラクティスは、のサイズのXML(つまり100ノード対100ノード)によって異なりますか?

答えて

6

誰もを指摘していないことを<xsl:apply-templates><xsl:-for-each>の本質的な違い:

xsl:apply-templatesは次のとおりです。

  1. <xsl:apply-templates>が本当に<xsl:for-each>のよりよい、よりエレガントな当量よりはるかに何かありますxsl:for-eachよりもはるかに豊かで深い、さらに のノードに適用されるコードはわかりません。一般的に、このコードは のノードリストの異なるノードでは異なります。書かれたテンプレートを適用し、 人々によって原作者を知らないこと: 適用されます。また

    コードは、XSLの後に道を書き込むことができます。


    _2。一方、を使用して<xsl:for-each>を使用すると、<xsl:for-each>が処理される方法が正確にわかっていれば、有害ではありません

    命令型プログラミングで経験を積んだXSLTの新人の多くは、好きなPLの "ループ"の代わりに<xsl:for-each>を取り入れ、カウンターを増やすなどの不可能な方法既に定義された<xsl:variable>の任意の他の修正を含むことができる。

    <xsl:for-each>の不可欠な使用法は、現行の文書を変更することです。たとえば、独自のxml文書に存在するルックアップテーブルに効率的にアクセスするには、多くの場合、in order to be able to use the key() function on a document, different from the current source XML documentが必要です。

2

クイックアンサー:XSLTは本質的に機能的であり、必須ループはあまり機能しません。

一般にXSLTを最大限にするベースの方法は、(むしろループよりxsl:apply-template IFSおよびコールテンプレート)をできるだけパターンマッチングを使用することです。

結局のところ、それはスタイルに関するものであり、短いXSLTの違いはほとんどありませんが、より機能的であれば、より長く複雑な問題に役立ちます。

出力を変更するのではなく値を返す関数を作成する場合以外は、

+0

<必須>はにはありません。また、「使用テンプレート」とはどういう意味ですか? XSLTにそのような命令はありません。 –

+0

s/use-template/call-template /:Typo – Richard

+0

ループ(または任意のタイプ)は、命令型プログラミングの領域です。機能的には、再帰を使用します。 – Richard

1

apply-templates(おそらくmode)を使用すると、その場所で重要な要素がさらに適切に変換されるようになります。

たとえば、図書館の内容を含むXMLがあり、どこでも本を選択するためにそれぞれを使用している場合は、DVD、CD、ジンジャーナッツビスケットなどの記録を保存し始めます。すべてのfor-eachセクションで単なる書籍以上のものを調べてください。適用テンプレートを使用していた場合は、単に新しい要素の新しい一致を作成することができます。

5

テンプレートは、コードをよりうまく分割する傾向があります。また、for-eachループは、主要プログラミング言語でのループ処理と同じように動作するという考え方で人々が頻繁に来るという事実に苦しんでいます。

2

for-each自体の広範な使用ではなく、落胆したテンプレートを呼び出すのにはfor-eachを使用します。 Muenchian method of groupingでさえ、ループを有するxsl:key構築物に依存する。

良いXSLTを書くというアイデアは、XMLの構造がどのテンプレートが適合してから適用されるかを指示する必要があるということです。したがって、可能であれば、for-eachを使用して選択を適用するのではなく、apply-templatesを使用してノードを選択してください。

関連する問題