XSLT: call-template e apply-templates parametrici
In XSLT possiamo definire dei parametri con il comando param. I parametri possono essere globali per il documento XSLT, se sono definiti allo stesso livello dei template, oppure locali ad un template, se sono definiti come figli di un qualsiasi template.
Per definirli dobbiamo usare la sintassi:
<xsl:param name="NOME" select="XPath Expression" />
oppure semplicemente:
<xsl:param name="NOME" />
Nel primo caso forniamo un valore leggendolo da uno dei documenti in input (lo so, ho usato il plurale ... ci arriveremo). Nel secondo caso potremo valorizzare il parametro, se è globale, alla chiamata della trasformazione XSTL, da codice VB.NET, C#, VB6, VBScript, Java, ecc.
Oppure potremo utilizzare un parametro senza valore preassegnato per inserirlo come figlio di un template, per poi richiamare il template, come fosse una procedura, passandogli di volta in volta valori differenti per il parametro.
Per esempio:
<xsl:template name="ProvaTemplateParametrico">
<xsl:param name="Parametro" />
<xsl:value-of select="$Parametro" />
</xsl:template>
definisce un template denominato, si noti che non ha un match ma un name, il quale si aspetta un parametro di nome "Parametro" appunto che sarà letto come nodo pari a $[Nome Parametro], nel nostro caso "$Parametro".
Per chiamare un template come quello appena visto potremo scrivere:
<xsl:call-template name="ProvaTemplateParametrico">
<xsl:with-param name="Parametro" select="XPath Expression" />
</xsl:call-template>
Dove come si vede viene chiamato per nome il template, passandogli il parametro valorizzato. Si può fare altrettanto con apply-templates.
A volte questo modo di lavorare semplifica di molto le cose e in certi casi permette di implementare delle trasformazioni ricorsive (ma non abusatene!)