Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Richiamare i templates per nome

Identificare con un nome univoco i template e utilizzarli più volte
Identificare con un nome univoco i template e utilizzarli più volte
Link copiato negli appunti

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.


Ti consigliamo anche