Richiamare i templates per nome

17 marzo 2006

Negli esempi precedenti abbiamo utilizzato l’elemento <xsl:apply-templates select=”nomeTAG”/> per dire al processore di applicare un determinato template a tutti i nodi “nomeTAG” specificati in base alla loro profondità nell’albero XML. Il processore ogni volta che incontrava un elemento che soddisfava questa richiesta applicava le regole specificate nel template associato. Se nessun nodo soddisfava questa richiesta non avveniva nulla.

Identificare i template con un nome

Un altro modo di utilizzare i templates è quello di specificare un nome che identifichi in modo univoco un template e richiamarlo per nome da qualunque posizione. Questo quindi vuol dire che non potranno esistere due modelli con lo stesso nome; in caso contrario il processore andrà in errore. L’utilizzo dei modelli con nome è molto simile all’utilizzo delle funzioni nei più comuni linguaggi di programmazione, e la loro utilità sta proprio nel fatto che le funzioni eseguono determinate operazioni che magari in un listato devono essere fatte più volte. In questo modo si evita di riscrivere codice ridondante e per modificare il risultato della funzione è sufficiente intervenire solo sulla porzione di codice interessato senza dover scorrere tutto il listato. Questo modo di programmare inoltre permette di creare listati di codice più snelli e facilmente leggibili.

Vediamo a questo proposito un esempio di codice reale da applicare allo stesso sorgente XML dell’esempio 5.

Esempio 6

Codice XSLT utilizzato ( listacd_es6.xslt ):

<?xml version=”1.0″ encoding=”UTF-8″?> <!– Prologo XML –>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>

     <xsl:template match=”/”>
      <html>
       <xsl:apply-templates select=”//artista”/> 
      </html>
     </xsl:template>


     <xsl:template match=”//artista”>
      <b>
       Artista: <xsl:call-template name=”stampa”/>
      </b> 
      <xsl:apply-templates select=”albums//album”/> 
      <br/> 
     </xsl:template>

     <xsl:template match=”albums//album”>
      <br/>
       <xsl:text>  </xsl:text> <!– inserimento spazio bianco –>
       - Titolo dell’album: <xsl:call-template name=”stampa”/> 
     </xsl:template>



     <xsl:template name=”stampa”>
       <xsl:value-of select=”@nome”/>
       <xsl:value-of select=”titolo”/>
     </xsl:template>

</xsl:stylesheet>

 

Risultato in Output della trasformazione (esempio 6)

<html>

<b>Artista: Stanley Jordan</b><br>
- Titolo dell’album: Magic Touch<br>
- Titolo dell’album: Stolen Moments<br>

<b>Artista: Nick Drake</b><br>
- Titolo dell’album: Pink Moon<br>
- Titolo dell’album: Bryter Layter<br>
- Titolo dell’album: Five leaves left<br>

<b>Artista: Jeff Buckley</b><br>
- Titolo dell’album: Grace<br>
- Titolo dell’album: Mistery white boy<br>

<b>Artista: Joe Satriani</b><br>
- Titolo dell’album: Surfing with the alien<br>
- Titolo dell’album: Not of this earth<br>

</html>

Come possiamo notare il template con nome “stampa” viene richiamato da due templates e esegue due operazioni diverse:

  • Quando viene chiamato dal template che sta processando l’elemento <artista> stampa in output il valore dell’attributo nome (<xsl:value-of select=”@nome”/>)
  • Quando viene chiamato dal template che sta processando l’elemento <album> stampa in output il valore dell’elemento <titolo>.

Clicca qui per vedere il risultato della trasformazione sul browser.

Clicca qui per vedere l’XSLT sul browser.

Tutte le lezioni

1 ... 9 10 11 ... 30

Se vuoi aggiornamenti su Richiamare i templates per nome inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Richiamare i templates per nome

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy