vorresti spiegarmi la differenza tra <xsl:apply-template>
e <xsl:call-template>
e quando devo usare <xsl:call-template>
?
sidifferenza tra <xsl: apply-template> e <xsl: call-template>?
risposta
ringrazio a un livello molto elementare, si utilizza <xsl:apply-templates>
quando si vuole lasciare automaticamente i nodi maniglia del processore, e si utilizza <xsl:call-template/>
quando si desidera un maggior controllo sul processo. Quindi, se avete:
<foo>
<boo>World</boo>
<bar>Hello</bar>
</foo>
e si ha la seguente XSLT:
<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>
Si otterrà il risultato WorldHello
. In sostanza, hai detto "handle bar and boo in questo modo" e poi hai lasciato che il processore XSLT gestisse questi nodi mentre li incontrava. Nella maggior parte dei casi, è così che dovresti fare le cose in XSLT.
A volte, però, si vuole fare qualcosa di più elaborato. In tal caso, puoi creare un modello speciale che non corrisponde ad alcun nodo particolare. Per esempio:
<xsl:template name="print-hello-world">
<xsl:value-of select="concat(bar, ' ' , boo)" />
</xsl:template>
E si può quindi chiamare questo modello, mentre si sta elaborazione <foo>
piuttosto che elaborare automaticamente foo
's nodi figlio:
<xsl:template match="foo">
<xsl:call-template name="print-hello-world"/>
</xsl:template>
In questo particolare esempio artificiale, è ora ottenere " Hello World "perché hai sovrascritto l'elaborazione predefinita per fare le tue cose.
Spero che questo aiuti.
Vi prego di spiegare la differenza tra
<xsl:apply-template>
e<xsl:call-template>
e quando dovrei usare<xsl:call-template>
?
Uno può uso <xsl:call-template>
ma quasi mai dovrebbe.
E 'nello spirito di XSLT per consentire al processore XSLT per determinare esattamente quale template migliori partite un nodo e per decidere di utilizzare questo modello per l'elaborazione di quel nodo. Questo ci dà estensibilità e polimorfismo puliti, facili e potenti.
In generale, confrontando xsl:apply-templates
a xsl:call-template
è simile a confrontare l'invocazione di un metodo virtuale da una classe base a quella di chiamare direttamente un metodo non virtuale.
Qui sono alcune importanti differenze:
xsl:apply-templates
è molto più ricco e più profondo dixsl:call-templates
e anche daxsl:for-each
, semplicemente perché non sappiamo quale codice sarà applicato sui nodi di la selezione - nel caso generale questo codice sarà diverso per nodi diversi della lista di nodi.Il codice che verrà applicato si può scrivere via dopo la
xsl:apply-templates
è stato scritto e le persone che non conoscono l'autore originale.
attuazione s' La FXSL library di funzioni di ordine superiore (HOF) in XSLT non sarebbe possibile se XSLT non aveva l'istruzione <xsl:apply-templates>
.
Sommario: I modelli e l'istruzione <xsl:apply-templates>
sono il modo in cui XSLT implementa e si occupa del polimorfismo. Si può e si dovrebbe evitare di usare xsl:call-template
, che non consente il polimorfismo e limita la riusabilità e la flessibilità.
Riferimento: Vedere tutta questa discussione: http://www.stylusstudio.com/xsllist/200411/post60540.html
- 1. Differenza tra <xsl: apply-templates select = "./*" /> e <xsl: apply-templates />
- 2. differenza tra xsl: param e xsl: variabile
- 3. Qual è la differenza tra <xsl: apply-templates /> e <xsl: apply-templates select = "." />
- 4. <xsl: variable> Stampa il valore della variabile XSL utilizzando <xsl: value-of>
- 5. inserisci <? Tag xml-stylesheet con xsl
- 6. XSL xsl: modello match = "/"
- 7. test XSL vuote stringhe con <xsl:if> e smistamento
- 8. Differenza tra <? Php e <?
- 9. Assegna a <xsl: variabile> dopo la cifratura
- 10. Utilizzo di variabili in <xsl: sort select = "" />
- 11. differenza tra <> e =
- 12. trasformazione xsl
- 13. Riferimento incrociato XSL
- 14. switch case in XSL
- 15. In ASP.Net, qual è la differenza tra <% = e <% #
- 16. Differenza tra operatori di stringa + e << in Ruby
- 17. Ruby - Differenza tra matrice # << e matrice # push
- 18. Differenza tra ArrayList <>() e ArrayList <>() {}
- 19. Differenza tra <asp:table> e <table>?
- 20. Differenza tra <acronym> e <abbr>?
- 21. Differenza tra inizializzazioni stringstream.str (a_value) e stringstream << a_value
- 22. LXML e documento XSL() Funzione
- 23. Qual è la differenza tra cout << cout e cout << & cout in C++?
- 24. XSL: passaggio di variabili tra i modelli
- 25. xsl: value-of utilizzato come xsl: nome dell'elemento
- 26. xsl: variabile come valore xpath per l'altro tag xsl
- 27. Come utilizzare la variabile XSL in xsl: apply-templates?
- 28. Qual è la differenza tra <%: e <% = e <% # in aspx?
- 29. XSL - Escaping di un apostrofo durante xsl: durante il test
- 30. xsl scorrere l'elenco dell'alfabeto
Finora questo è la migliore spiegazione che io abbia mai letto su XSLT (anche se devo aggiungere che XSLT non è il mio genere, e forse mai. sarà) –