In un precedente articolo abbiamo visto come leggere un file XML con ASP ed XMLDOM in maniera tradizionale. Negli articoli introduttivi ad XML e ad XSL, invece, abbiamo introdotto la tecnologia e la struttura dell’ormai noto linguaggio estensibile, e la trasformazione stilistica proprietaria in formato HTML intelligibile da un browser, limitandoci però ad un est lato client.
Lo scopo di questo articolo è quello di affrontare la trasformazione di un file XML con XSLT lato server attraverso ASP.
Il sistema è dei più semplici; prendiamo come spunto i file “rubrica.xml” e “rubrica.xsl” presentati negli articoli introduttivi, indicati con un link nelle righe precedenti di questo articolo, di cui ripropongo i codici
<?xml version="1.0" encoding="ISO-8859-1"?>
<rubrica>
<utente>
<nome>Pippo</nome>
<telefono>001122</telefono>
</utente>
<utente>
<nome>Pluto</nome>
<telefono>334455</telefono>
</utente>
<utente>
<nome>Paperino</nome>
<telefono>667788</telefono>
</utente>
</rubrica>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="/">
<table align="center" width="50%" border="1">
<tr bgcolor="#000000">
<td style="color: #FFFFFF;"><b>Nome</b></td>
<td style="color: #FFFFFF;"><b>Telefono</b></td>
</tr>
<xsl:for-each select="rubrica/utente">
<tr>
<td><xsl:value-of select="nome" /></td>
<td><xsl:value-of select="telefono" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Al file XSLT ho aggiunto una riga evidenziata in grassetto, il cui scopo è quello di produrre in output codice HTML pulito e non codice HTML ed XML misto.
Veniamo al codice ASP, da posizionare nel punto in cui si vuole che venga effettuata la trasformazione e la relativa stampa a video
<%
Dim MyXML, MyXSL
Set MyXML = Server.CreateObject("Microsoft.XMLDOM")
MyXML.Async = False
MyXML.Load Server.MapPath("rubrica.xml")
Set MyXSL = Server.CreateObject("Microsoft.XMLDOM")
MyXSL.Async = False
MyXSL.Load Server.MapPath("rubrica.xsl")
Response.Write MyXML.transformNode(MyXSL)
Set MyXML = Nothing
Set MyXSL = Nothing
%>
Il funzionamento è ormai davvero banale: creo due oggetti XMLDOM ed in uno carico il file XML, mentre nell’altro carico il file XSLT; utilizzo poi il metodo transformNode associato all’istanza dell’oggetto XMLDOM che carica il file XML; passerò poi come parametro obbligatorio al metodo l’istanza dell’oggetto XMLDOM che carica il file XSLT.
