Home Page Home Page Articoli Creare pagine HTML utilizzando XML e XSLT (XML2HTML)

Creare pagine HTML utilizzando XML e XSLT (XML2HTML)

In questo articolo vedremo come creare una pagina HTML "formattata" partendo da un file XML e trasformandolo tramite XSLT. Tutti sapete cosa sia un documento HTML, quasi tutti sapete cosa sia un documento XML ma pochi sanno cosa sia l’ XSLT, cerchiamo, quindi, in poche righe, di capire di cosa stiamo parlando.
Autore: Stefano Passatordi Livello:
Extensible Stylesheet Language Transformations (XSLT) è un linguaggio XML-based utilizzato per elaborare e trasformare un normale documento XML in nuovo XML oppure in un documento di un altro tipo, come, ad esempio, HTML. L'XSLT è ormai molto diffuso ed è da tempo uno standard web del W3C.
Come è possibile leggere dal sito ufficiale del W3C, l’XSLT è parte di un progetto più grande che si chiama XSL(Extensible Stylesheet Language) che è una "famiglia" di raccomandazioni per definire le trasformazioni e le presentazioni dei documenti XML.

L'XSL è composto da :

1. XSLT che è un linguaggio per trasformare un documento XML.
2. XPath (XML Path Language) che è un linguaggio utilizzato da XSLT per accedere e navigare il documento XML.
3. XSL-FO (XSL Formatting Objects) che è un vocabolario XML per specificare la semantica delle trasformazioni.

Per generare una trasformazione XSLT occorrono due file:

1. un documento XML da trasformare
2. un documento che contiene il foglio di stile XSL.

Quest'ultimo è un insieme di regole di trasformazione da applicare ai nodi del documento XML iniziale. Entrambi questi due file vengono dati in pasto ad un processore XSLT che ha il compito di individuare i nodi del documento XML ed applicare ad essi le relative regole contenute nel foglio di stile XSL. L’output sarà un nuovo documento che, in base alle regole applicate, potrà essere, ad esempio, un nuovo XML, un nuovo HTML, un nuovo XHTML, un nuovo WML o un nuovo RTF.
Dopo la teoria passiamo alla pratica.
Nel nostro esempio abbiamo un file XML (cd_catalog.xml) con la seguente struttura :

Codice XML n°1
<CATALOG>
<CD>
<TITLE></TITLE>
<ARTIST></ARTIST>
<COUNTRY></COUNTRY>
<COMPANY></COMPANY>
<PRICE></PRICE>
<YEAR></YEAR>
</CD>
</CATALOG>

Vogliamo creare un documento HTML con una tabella contenente solo i dati relativi a Title, Artist e Price e i le righe devono essere ordinate alfabeticamente secondo l’artista.
A questo punto non ci resta che creare il nostro foglio di stile (cd_catalog_style.xslt) che sarà così costituito :

Codice XML n°2
<?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" encoding="iso-8859-1"/>

<xsl:template match="/">
<html>
<body>
<h1 align="center">XML2HTML</h1>
<h2 align="center">CATALOGO CD</h2>
<p align="center">
<table width="100%" border="1">
<thead>
<tr align="center">
<th>Window</th>
<th>Date</th>
<th>Time</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="CATALOG/CD">
<xsl:sort select="ARTIST"/>
<tr>
<td width="33%">
<xsl:value-of select="TITLE"/>
</td>
<td width="33%">
<xsl:value-of select="ARTIST"/>
</td>
<td width="33%">
<xsl:value-of select="PRICE"/>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Noterete subito che il foglio di stile è a sua volta un file XML. Il nodo più importante è sicuramente l’elemento template che contiente le regole da applicare all’elemento indicato da match. Con '/' indichiamo l’elemento root del documento XML.
Subito dopo incontriamo normali elementi HTML finchè non si arriva all’interno del corpo della tabella dove incontriamo il blocco di nostro interesse :

Codice XML n°3
<xsl:for-each select="CATALOG/CD">
<xsl:sort select="ARTIST"/>
<tr>
<td width="33%">
<xsl:value-of select="TITLE"/>
</td>
<td width="33%">
<xsl:value-of select="ARTIST"/>
</td>
<td width="33%">
<xsl:value-of select="PRICE"/>
</td>
</tr>
</xsl:for-each>

Basta dare uno sguardo per capire il significato di ogni singola riga XSLT (regola di trasformazione) :

• la prima introcude un ciclo for-each, relativo a tutti i nodi CD figli del nodo radice CATALOG
• la seconda imposta il criterio di ordinamento secondo il valore dell’elemento ARTIST
• successivamente viene creata la riga della tabella e i valori delle colonne sono, nell’ordine, i valori degli elementi TITLE, ARTIST e PRICE

Da notare quanto sia semplice utilizzare XSLT e come nelle regole si faccia uso di XPath (es. select="TITLE" ) per indicare i nodi e gli elementi da trasformare.

Utilizzando C#, vediamo ora il codice necessario per applicare la trasformazione voluta usando il processore XSLT fornito dal Framework 2.0.

Codice .NET n°4
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

public void CreateHTML()
{

try

{

XPathDocument myXPathDocument = new XPathDocument("cd_catalog.xml");
XslCompiledTransform myXslTransform = new XslCompiledTransform();
XmlTextWriter writer = new XmlTextWriter("cd_catalog.html", null);
myXslTransform.Load("cd_catalog_style.xslt");
myXslTransform.Transform(myXPathDocument, null, writer);
writer.Close();
System.Diagnostics.Process.Start("cd_catalog.html");

}

catch (Exception ex)
{System.Windows.Forms.MessageBox.Show(ex.Message);}

}

Prima di tutto bisogna importare i namespaces System.Xml , System.Xml.XPath e System.Xml.Xsl.

Creiamo un oggetto XPathDocument, che fornisce una rappresentazione in memoria e in sola lettura di un documento XML tramite il modello di dati XPath, e gli passiamo il nostro documento XML.
Istanziamo un oggetto XslCompiledTransform che trasforma i dati XML utilizzando un foglio di stile XSLT, successivamente istanziamo un oggetto XmlTextWriter che rappresenta uno stream che fornisce un modo veloce di generare flussi o file che contengono dati XML e gli passiamo come argomento il file finale che conterrà l’HTML e null perchè vogliamo la codifica dei caratteri di default.

Con il metodo Load di XslCompiledTransform carichiamo il foglio di stile da utilizzare e con il metodo Transform applichiamo la trasformazione scrivendo il risultato sullo StreamWriter.
A questo punto potremo vedere il risultato della trasformazione.
Con XSLT è possibile effettuare trasformazioni molto più complicate di quelle viste in questo articolo, trovate una guida completa per XSLT qui 
Voto medio articolo: 5.0 Numero Voti: 1

File allegati


XML2HTML.zip (37 Kbyte)
Stefano Passatordi

Stefano Passatordi

Laureato in Tecnologie Informatiche presso l'Università di Pisa.Amante della programmazione in generale,ha iniziato da autodidatta con VB6 e poi tramite l'università e studi personali ha approfondito le sue conoscenze in vari ambiti del mondo della programmazione. Profilo completo

Articoli collegati

XML in SQL Server 2005
Scopriamo come è stato implementato il supporto nativo XML in SQL Server 2005, mostrando anche come è possibile con XQuery gestire e manipolare i dati XML all'interno del Database.
Autore: Marco Caruso | Difficoltà: | Commenti: 2 | Voto:
BLOB in XML
In quest'articolo vedremo come scrivere e leggere Blob(Binary Large Object) in un file XML utilizzando la classe XmlTextWriter e la classe XmlTextReader.
Autore: Marco Caruso | Difficoltà: | Commenti: 1 | Voto:
Il DOM XML
Microsoft ha messo a disposizione degli sviluppatori un intero namespace (System.XML) per la manipolazione dei files XML tramite il DOM, vediamo in questo articolo alcuni percorsi per operare facilmente con XML
Autore: Marco Caruso | Difficoltà: | Commenti: 16
SOAP Headers e sicurezza nei web services
Hai un web service e non sai se è sicuro? Questo articolo ti illustra uno dei tanti metodi per rendere sicuro il tuo web service, i SOAP Headers.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 2 | Voto:
dotNetHell Contents Web Service
Un nuovo Web Service a disposizione di tutti quelli che desiderano pubblicare i contenuti offerti da dotNetHell (Articoli, News e Tips) nei loro siti Web tramite l'utilizzo di script preconfezionati per ASP Classico, ASP.NET, PHP e Javascript
Autore: David De Giacomi | Difficoltà: | Voto:
Ricerca in un file XML: un Textbox per il tuo sito dinamico
Una soluzione semplice ed elegante per creare un sito Web dinamico consiste nell?utilizzo di XML. Vi mostrerò in questo articolo come implementare un campo di ricerca per i vostri siti basati su XML e .NET.
Autore: Luigi Corrias | Difficoltà: | Commenti: 2
Il calcolo del Codice Fiscale
Mostreremo in questo articolo un algoritmo molto comune; è l'algoritmo che ci permette di calcolare il Codice Fiscale. Oltre a questo dotNetHell mette a disposizione un Web Service che può essere "consumato" (utilizzato) da chiunque liberamente.
Autore: David De Giacomi | Difficoltà: | Commenti: 12 | Voto:
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5