ASPcenter.net

8 marzo 2010

Celle di colori alternati con ASP, XML ed XSL

Archiviato in: ASP e XML — Tag:, , , , , , — lukeonweb @ 09:37

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
%>

Nessun commento »

Non c'è ancora nessun commento.

RSS feed dei commenti a questo articolo. TrackBack URL

Lascia un commento

ASPcenter.net è il blog italiano su ASP, ASP.Net, VB.Net, C# e Visual Studio - Funziona con WordPress