Articoli Referenze Script FAQ Downloads ASP E-Commerce con ASP Menu Javascript Ricette Cocktail Registrazione domini Area Aziende



Celle di colori alternati con ASP, XML ed XSLT

Home + Articoli + XML + Articolo # 162
Autore: Luca Ruggiero

Concesso in esclusiva a Mr.Webmaster. Vietata la riproduzione.


Le istruzioni condizionali dell'XSLT consentono di realizzare con semplicità report che si comportano in maniera differente a seconda di calcoli o dei dati presenti all'interno di un documento XML.

L'esempio di questo Articolo mette in pratica un utile script che genera un report in celle di colori alternati, effettuando la trasformazione lato server attraverso ASP.

Creiamo una semplice struttura di dati XML nel file database.xml
<?xml version="1.0"?>

<database>
    <utente>
        <id>1</id>
        <nome>Luca</nome>
        <cognome>Ruggiero</cognome>
    </utente>
    <utente>
        <id>2</id>
        <nome>Max</nome>
        <cognome>Bossi</cognome>
    </utente>
    <utente>
        <id>3</id>
        <nome>Claudio</nome>
        <cognome>Garau</cognome>
    </utente>
    <utente>
        <id>4</id>
        <nome>Alessandro</nome>
        <cognome>Alessandrini</cognome>
    </utente>
</database>
Stilizziamo ora dinamicamente l'output del file XML col seguente codice XSLT nel file style.xsl
<?xml version="1.0"?>

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" />
    <xsl:template match="/">
        <h1>UTENTI</h1>
        <table border="1">
            <thead bgcolor="#000000" style="color: #FFFFFF;">
                <th>Nome</th>
                <th>Cognome</th>
            </thead>
            <xsl:for-each select="database/utente">
            <xsl:choose>
                <xsl:when test="id mod 2 = 1">
                <tr bgcolor="#FFFFFF">
                    <td><xsl:value-of select="nome" /></td>
                    <td><xsl:value-of select="cognome" /></td>
                </tr>
                </xsl:when>
                <xsl:otherwise>
                <tr bgcolor="#FFFFCC">
                    <td><xsl:value-of select="nome" /></td>
                    <td><xsl:value-of select="cognome" /></td>
                </tr>
                </xsl:otherwise>
            </xsl:choose>
            </xsl:for-each>
        </table>
    </xsl:template>
</xsl:stylesheet>
Commentiamo un po il codice per renderci conto delle sue azioni dinamiche.

Prima operazione è quella di impostare l'output in formato HTML per evitare che la trasformazione, da ASP, avvenga importando Tag XML:
<xsl:output method="html" />
questa operazione possiamo considerarla come valore aggiunto al report ma non è fondamentale ai fini della riuscita dello script.

Apriamo il template XSLT ed iniziamo a scrivere il codice HTML.

Ad un certo punto, all'interno del ciclo che estrae tutti i dati dal file XML, utilizziamo le istruzioni condizionali xsl:when ed xsl:otherwise, all'interno di un gruppo di scelta condizionale xsl:choose, per impostare due condizioni, ovvero quelle secondo le quali le celle su una stessa riga saranno, in maniera alternata, di un colore piuttosto che di un altro
<xsl:choose>
    <xsl:when test="id mod 2 = 1">
    <tr bgcolor="#FFFFFF">
        <td><xsl:value-of select="nome" /></td>
        <td><xsl:value-of select="cognome" /></td>
    </tr>
    </xsl:when>
    <xsl:otherwise>
    <tr bgcolor="#FFFFCC">
        <td><xsl:value-of select="nome" /></td>
        <td><xsl:value-of select="cognome" /></td>
    </tr>
    </xsl:otherwise>
</xsl:choose>
Effettuiamo il test condizionale con l'operatore modulo in base 2, impostando la condizione di uguaglianza su 1, in modo da ottenere una condizione vera ogni due.

Di seguito il codice commentato del file ASP che effettua la trasformazione:
<%@LANGUAGE = VBScript%>
<%
    ' Dichiaro le variabili che mi servono
    Dim database, style

    ' Setto due oggetti XMLDOM, uno per il file XML
    ' ed un secondo per il file di stile dinamico XSLT
    Set database = Server.CreateObject("Microsoft.XMLDOM")
    Set style = Server.CreateObject("Microsoft.XMLDOM")

    ' Setto i due oggetti come sincroni
    database.async = False
    style.async = False

    ' Carico i file XML ed XSLT
    database.load Server.MapPath("database.xml")
    style.load Server.MapPath("style.xsl")

    ' Nel corpo della pagina effettuo la trasformazione...
%>
<html>
    <head>
    <title>Celle di colori alternati con ASP, XML ed XSLT</title>
    </head>
<body>

<%=database.transformNode(style)%>

</body>
</html>
<%
    ' Un po di pulizia...
    Set database = Nothing
    Set style = Nothing
%>
© 2008 ASP Center di Luca Ruggiero - P. IVA 05564851219 - Disclaimer | Privacy | Pubblicità | Supportaci | Staff | Contatti
  Appunti PHP | Giornale Webmaster | Mr.Webmaster | Download | DevSpy.com | ASPCode.it | ClaudioGarau.it | Webmaster Facile | Come Faccio | AlVerde.net | CodiceFacile.it | I Programmatori | By Luciani | VoiceXML Italian User Group | Giochi | Extro Web Site | Morpheus Web | AG Web Solutions | Net-Free | PC Sicuro | PC Self | Tutorial Web | Dablones