Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

Gli attributi di XSL

E' arrivato il momento di creare anche gli attributi con l'XSLT. Fino a questo momento non abbiamo ancora preso in considerazione il caso in cui l'XML contenga degli URL relativi a siti web o a delle immagini che dobbiamo visualizzare nell'output HTML.

Sappiamo che in HTML i TAG <img> e <a>, che ci permettono rispettivamente di caricare immagini e di creare collegamenti ipertestuali, hanno degli attributi. In particolare <img> ha un attributo src che indica l'URL dell'immagine da caricare mentre l'elemento <a> ha un attributo href che contiene l'URL del collegamento ipertestuale.

(L'articolo continua più sotto...)

Nell'XSLT utilizziamo l'elemento <xsl:attribute> per creare un attributo e assegnargli un valore. Questo elemento infatti possiede un attributo name che indica il nome dell'attributo che dev'essere creato.

Un esempio (pratico) ci chiarirà le idee:

<a>
    <xsl:attribute name="href">
        http://www.mrwcorsi.it
    </xsl:attribute>
    Parola linkata
</a>
Il codice XSLT che abbiamo appena scritto crea l'attributo href per l'elemento <a> e gli assegna il valore http://www.mrwcorsi.it.

Questo darà luogo al seguente codice HTML:

<a href="http://www.html.it">Parola linkata</a>
Vediamo ora un esempio di codice un po più complesso in modo da vedere in modo pratico come creare un output HTML decisamente più complesso. Consideriamo il solito documento XML contenente dei cantanti con delle rispettive informazioni come ad esempio: un URL del proprio sito web e per ogni album un collegamento ad una immagine rappresentante la copertina.
.
.
<artista nome="Pinco Pallino">
    <url>http://www.pincopallino.com</url>
        <albums>
            <album>
                <!-- Cd acquistato a Torino nel giugno del 1998 -->
                <titolo>Chi lo conosce</titolo>
                <anno>1985</anno>
                <etichetta>La sua </etichetta>
                <durata>65</durata>
                <img>chi_PP.gif</img>
            </album>
            <album>
                <!-- Cd avuto in regalo per il compleanno del 2002 -->
                <titolo>Pausa Pausa </titolo>
                <anno>1991</anno>
                <etichetta>La nostra </etichetta>
                <durata>72</durata>
                <img>PP_PP.gif</img>
            </album>
            </albums>
</artista>
.
.
.
Codice XSLT utilizzato:
<?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>
<table
    cellpadding="1"
    cellspacing="2"
    width="450"
    align="center"
    bgcolor="#000000">
    <xsl:for-each select="listacd/artista">
        <tr>
            <td colspan="2" width="450" bgcolor="#ff8855">
                <b>Artista: </b>
                <xsl:value-of select="@nome"/>
                <br/>
                <b>URL sito web: </b>
                <a target="_blank">
                <xsl:attribute name="href">
                <xsl:value-of select="url"/>
                </xsl:attribute>
                <xsl:value-of select="url"/>
                </a>
            </td>
        </tr>
        <xsl:for-each select="albums/album">
            <xsl:if test="position() mod 2 = 0">
                <tr bgcolor="#f8f8f8">
                    <td width="150" align="center">
                        <img>
                        <xsl:attribute name="src">    
                        <xsl:text>img/</xsl:text>
                        <xsl:value-of select="img"/>
                        </xsl:attribute>
                        </img> 
                    </td>
                    <td width="300">
                        <b>Titolo: </b>
                        <xsl:value-of select="titolo"/>
                        <br/>    
                        <b>Anno: </b>
                        <xsl:value-of select="anno"/>
                        <br/>
                        <b>Etichetta: </b> 
                        <xsl:value-of select="etichetta"/>
                        <br/>
                    </td> 
                </tr>
                </xsl:if>
                <xsl:if test="position() mod 2 != 0">
                <tr bgcolor="#CCFFFF">
                    <td width="150" align="center">
                        <img>
                        <xsl:attribute name="src">
                        <xsl:text>img/</xsl:text>
                        <xsl:value-of select="img"/>
                        </xsl:attribute>
                        </img> 
                    </td>
                    <td width="300">
                        <b>Titolo: </b>
                        <xsl:value-of select="titolo"/>
                        <br/>
                        <b>Anno: </b>
                        <xsl:value-of select="anno"/>
                        <br/>
                        <b>Etichetta: </b> 
                        <xsl:value-of select="etichetta"/>
                        <br/>
                    </td> 
               </tr>
           </xsl:if> 
        </xsl:for-each> 
            <tr>
                <td>
                    <br/>
                </td>
            </tr> 
        </xsl:for-each> 
    </table> 
</html>
</xsl:template>
</xsl:stylesheet>
Come possiamo notare dall'esempio appena fatto abbiamo utilizzato l'elemento <xsl:attribute> per creare attributi degli elementi <img> e <a>. Naturalmente possiamo creare più di un attributo per uno stesso elemento.

Notiamo che nel caso dell'immagine ad esempio tutti gli elementi che sono inclusi tra <xsl:attribute name="src"> e </xsl:attribute> vengono aggiunti al valore dell'attributo src. Per poter specificare il percorso dell'immagine abbiamo quindi aggiunto <xsl:text>img/</xsl:text>. In questo modo l'url completo di ogni immagine sarà img/immagine.gif. Ovviamente l'url potrebbe anche essere specificato direttamente nell'XML o potrebbe essere un URL assoluto anzichè relativo. Se però pensiamo che i dati dell'XML vengono presi da un data base possiamo intuire che non è molto utile inserire nel nome dell'immagine anche il suo percorso perchè se dovesse cambiare il percorso dovremmo intervenire su tutti i dati del data base. Specificare invece il percorso nel documento XSLT è invece una soluzione ottimale anche se nel nostro caso modificare in seguito il percorso delle immagini comporterebbe la modifica del testo in ogni parte del documento e se il documento diventa più complesso la modifica diventa alquanto laboriosa.In questi casi risulta molto utile utilizzare le variabili.

Da notare inoltre l'utilizzo dell'espressione <xsl:if test="position() mod 2 = 0"> molto utilizzata in XSLT permette di testare se abbiamo un elemento in posizione pari o dispari e differenziare l'output come nel nostro caso, alternando i colori di sfondo delle righe della tabella. Su tale costrutto ritorneremo in seguito.

Vediamo ora come poter leggere il contenuto di un attributo. Per fare questo, nel solito esempio, mettiamo il nome dell'artista all'interno di un attributo nome, in questo modo:

<artista nome="Pinco pallino">
    <albums>
        .
        .
        .
        .
    </albums>
</artista>
<artista nome="Laura P">
    <albums>
        .
        .
        .
        .
    </albums>
</artista>
Se vogliamo leggere il nome dell'artista dobbiamo accedere all'attributo nome dell'elemento artista.

Leggere questo valore utilizzando l'elemento xsl:value-of vuol dire scrivere: <xsl:value-of select="@nome"/>. Vediamo quindi il corrispondente documento 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>
        <!-- Leggo l'attributo nome dell'elemento artista -->
        <xsl:value-of select="@nome"/>
    </b>
    <br/> 
</xsl:template>
</xsl:stylesheet>
Il risultato dell'output è questo:
- <b>Pinco Pallino</b>
- <b>Laura P</b>
- <b>Jonathan</b>
- <b>Bob</b>

Corsi
Corso CSSCorso CSS
Web Design ed Accessibilità secondo il W3C con CSS ed XHTML. A partire da 29 €.
Corso XMLCorso XML
Creazione di strutture XML, XSL ed altri linguaggi eXtensible. A partire da 39 €.
Sommario
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122