Vediamo ora come poter creare delle nostre regole che ci permettono di trasformare il documento XML dell'esempio 1.
Esempio 2
Documento XSLT (listacd_es2.xslt)
<?xml version="1.0" encoding="UTF-8"?> <!-- Prologo XML -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Applica questo template al nodo radice
indicato dal carattere / -->
<xsl:template match="/">
<html><body>
<xsl:apply-templates>
<!-- Richiama e applica gli altri template -->
</xsl:apply-templates>
</body></html>
</xsl:template>
<!-- Quando trova un nodo artista
applica questa regola -->
<xsl:template match="artista">
<xsl:value-of select="nome"></xsl:value-of>
<br />
</xsl:template>
</xsl:stylesheet>
Prima di esaminare l'output della trasformazione osserviamo il codice XSLT riportato sopra. L'elemento xsl:template è un modello che definisce delle regole che vengono applicate al nodo specificato nell'attributo match
del documento sorgente XML.
L'utilizzo del carattere /
indica al processore di applicare queste regole all'elemento radice dell'XML (nel nostro caso l'elemento radice nel documento XML è <listacd>
).
All'interno dell'elemento xsl:template
per prima cosa inseriamo i tag <html>
e all'interno di questi utilizziamo l'elemento xsl:apply-templates per richiamare gli altri modelli che saranno applicati agli elementi figli.
Nel nostro caso abbiamo definito un altro modello che viene applicato agli elementi <artista>
e come regole utilizziamo l'elemento xsl:value-of con l'attributo select per dire al processore di prendere il valore contenuto all'interno dell'elemento <nome>
. Infine utilizziamo il <br />
per andare a capo dopo ogni nome.
In definitiva il nostro XSLT esegue le seguenti azioni sul file XML: Prende l'elemento radice e ogni volta che trova un elemento <artista>
calcola il valore contenuto dentro l'elemento figlio <nome>
e lo stampa in output sul browser.
Ecco il risultato, ovvero l'output della trasformazione (esempio 2).
<html><body>
Stanley Jordan
<br />
Nick Drake
<br />
Jeff Buckley
<br />
Joe Satriani
<br />
</body></html>
- Clicca qui per vedere il risultato della trasformazione sul browser.
- Clicca qui per vedere l'XSLT sul browser.
Considerazioni importanti
- quando un Tamplate non corrisponde a nessun elemento dell'XML questo semplicemente non viene applicato, non crea quindi nessun errore
- il codice dell'XSLT dell'esempio 2 può essere ridotto se tutti gli elementi vuoti vengono scritti in questo modo
<elemento/>
(per esempio<xsl:apply-templates></xsl:apply-templates>
può essere scritto così<xsl:apply-templates/>
lo stesso vale per<br></br>
che possiamo scrivere così<br/>
;)