<xsl:apply-template>
と<xsl:call-template>
の違いを教えてください。いつ<xsl:call-template>
を使用しますか?
を使用すると、自動的にプロセッサハンドルノードを聞かせたいときに<xsl:apply-templates>
を使用し、非常に基本的なレベルでは、あなた<xsl:apply-template>と<xsl:call-template>の違いは?
答えて
に感謝し、あなたが処理をより細かく制御したいときは、<xsl:call-template/>
を使用しています。だから、あなたが持っている場合:
<foo>
<boo>World</boo>
<bar>Hello</bar>
</foo>
をし、次のXSLT持っている:あなたは結果WorldHello
を取得します
<xsl:template match="foo">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="bar">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="boo">
<xsl:value-of select="."/>
</xsl:template>
を。本質的に、あなたは「バーとブーをこの方法で処理する」と言ってきました。そして、XSLTプロセッサがこれらのノードを処理するようにしました。ほとんどの場合、XSLTでこれを行う方法です。
しかし、時には、あなたは何か好きなことをしたいと思っています。その場合、特定のノードと一致しない特別なテンプレートを作成することができます。あなたが<foo>
を処理するのではなく、自動的にfoo
の子ノードを処理しているときには、このテンプレートを呼び出すことができます
<xsl:template name="print-hello-world">
<xsl:value-of select="concat(bar, ' ' , boo)" />
</xsl:template>
そして:たとえば
<xsl:template match="foo">
<xsl:call-template name="print-hello-world"/>
</xsl:template>
この特定の人工的な例では、あなたが今 "を得ますあなた自身のことをするデフォルトの処理をオーバーライドしているからです。
希望に役立ちます。
あなたは私の
<xsl:apply-template>
と<xsl:call-template>
とするとき、私は<xsl:call-template>
を使用する必要があるとの違いを説明してくださいますか?
一つ<xsl:call-template>
しかし、ほとんど決してべきを使用することができます。
それは、XSLTプロセッサが正確に決定できるようにするためにXSLTの精神であるテンプレートベストマッチノードと、そのノードを処理するために、このテンプレートを使用することを決定します。これにより、クリーンで簡単で強力な拡張性と多形性が得られます。
一般に、xsl:apply-templates
からxsl:call-template
を比較することは、基本クラスからの仮想メソッドの呼び出しを、非仮想メソッドを直接呼び出す方法と比較することと似ています。
xsl:apply-templates
は、我々はのノードに適用されるどのようなコードを知らないという理由だけでxsl:call-templates
よりもはるかに豊かで深いとさえxsl:for-each
から、:ここは、いくつかの重要な違いです 選択 - 一般的なケースでは、このコードはノードリストの異なるノード で異なるでしょう。
xsl:apply-templates
がを書かれ、元の作者を知らない 人々によって後 が道を書き込むことができます適用されるコード。 XSLTは<xsl:apply-templates>
命令を持っていなかった場合はXSLTで高次関数(HOF)の
FXSL libraryの実装は不可能であろう。
要約:テンプレートと<xsl:apply-templates>
命令は、XSLTが多態性を実装し、扱う方法です。ポリモフィズムを許さず、再利用性と柔軟性を制限するxsl:call-template
の使用を避けてください。
リファレンス:この全体のスレッドを参照してください:http://www.stylusstudio.com/xsllist/200411/post60540.html
- 1. <の違いは? <?php
- 2. aspxの<%:と<%=と<%#の違いは何ですか?
- 3. XSDの<all><sequence><choice>との違いは?
- 4. Cの<と<<の違いは何ですか?
- 5. cout << coutとcout <<とcoutの違いは何ですか?
- 6. `<%#`と `<%=`とasp.net ascxファイルの違いは?
- 7. リスト<Observer*> *とリスト<Observer*>との違いはC++で
- 8. <article>と<section>との違いはHTML5です
- 9. '<>'と '!='の違い
- 10. の違いと<E>
- 11. !=と<>の違い
- 12. ASP.NET MVCの<%#と<%=の違いは何ですか?
- 13. Task <>とIAsyncOperation <>の違いは何ですか
- 14. <f:viewParam>と<f:param>の違いは何ですか?
- 15. <<と+ =の違いは何ですか?
- 16. <string>と<string.h>の違いは?
- 17. <objectAnimator>とValueAnimatorの違いは<animator>ですか?
- 18. NHibernate Query <>とQueryOver <>の違いは何ですか?
- 19. <tiles:add>と<tiles:put>ストラットの違いは何ですか?
- 20. <?の違いは何ですか?エコー __();と<= __();
- 21. <asp:table>と<table>の違いは?
- 22. <?php ?>と<? ?>の違いは何ですか?
- 23. <TargetFramework>と<RuntimeFrameworkVersion>の違いは何ですか?
- 24. PredicateBuilder <True>とPredicateBuilder <False>の違いは?
- 25. <chrono>と<ctime>の違いは何ですか?
- 26. <acronym>と<abbr>の違いは?
- 27. Apache OFBiz:<entity-condition>と<entity-and>の違いは?
- 28. と<ViewStub>の違いはandroid
- 29. ASP.NET - @構文と<% %>の違いは?
- 30. ElementName = "<Me>"とRelativeSourceの違いは?
これまでのところ、これは私が今までXSLTに読んだ最高の説明です(私は、XSLTを追加する必要がありますが、私のものではありませんん、そしておそらく決して。されます) –