Articoli Manifesto Tools Links Canali Libri Contatti ?
Linguaggi / XML

Utilizzo pratico di XML: Attraverso parser DOM, SAX e processori XSLT

Abstract
In questo articolo illustriamo come effettuare il parsing di documenti XML usano DOM e SAX.
Data di stesura: 01/04/2002
Data di pubblicazione: 30/09/2003
Ultima modifica: 04/04/2006
di Lorenzo Barbieri Discuti sul forum   Stampa

In collaborazione con ObjectWay

Introduzione

Al centro dell'architettura di un sistema che utilizza documenti XML vi è sempre un parser XML. Il parser XML può essere un componente esterno, una libreria o un insieme di classi, e ha il compito di caricare il documento XML e di renderlo disponibile all'applicazione.
Vi sono due categorie di parser, validanti e non validanti.
I parser validanti permettono di verificare il contenuto del documento attraverso un file esterno che contiene la descrizione della struttura.
La struttura può essere descritta attraverso DTD oppure attraverso XML Schema.
I DTD sono parte dello standard XML 1.0 e permettono di descriverne la struttura, mentre gli XML Schema sono un nuovo standard, in fase di approvazione, che permette di validare anche i tipi di dati utilizzati nel documento.
I parser non validanti non permettono di controllare la struttura del documento, delegando questo compito all'applicazione. Un parser XML può esporre i propri servizi attraverso due tipi di interfacce.
L'interfaccia basata sullo standard DOM permette di vedere il documento XML come se fosse un albero e permette di navigare i vari nodi.
L'interfaccia basata sullo standard SAX non mantiene il documento in memoria, ma mentre lo carica invoca i metodi dell'applicazione che si devono occupare di trattare gli elementi che gli sono stati passati.
Oltre al parser XML può essere necessario utilizzare un processore XSLT. Anche il processore XSLT può essere un componente esterno, una libreria o un insieme di classi.
Gli utilizzi principali del processore XSLT sono due: trasformare documenti XML in documenti HTML o trasformare documenti XML in altri documenti XML.
Le regole con cui sono effettuate queste trasformazioni sono contenute in un foglio di stile XSLT.

Utilizzo del parser DOM e del processore XSLT di Microsoft

Microsoft fornisce una DLL chiamata MSXML che contiene il parser XML ed il processore XSLT in forma di componenti COM. Questi componenti sono liberamente utilizzabili all'interno di applicazioni scritte in linguaggi COM compatibili, come Visual Basic, Visual C++, ASP, Delphi, ecc...
Questa DLL ha avuto varie evoluzioni, partendo dalla versione 1.0 contenuta in Internet Explorer 4, fino alla versione 2.x presente in IE 5.01 e in Windows 2000, e alla versione 3.0 disponibile come download dal sito di Microsoft, seguendo di pari passo la definizione degli standard collegati a XML.
La versione 3.0 rilasciata nel Novembre 2000 è completamente compatibile con gli standard DOM e SAX2, implementando la validazione dei documenti sia attraverso DTD, sia attraverso XML Schema. Il processore XSLT è completamente conforme alle specifiche XSLT 1.0.
Installando la versione 3.0 non vengono sostituite le versioni precedenti, in quanto sia la DLL sia i componenti al suo interno hanno un altro nome, in modo da mantenere una completa compatibilità con il passato.
Il componente più utilizzato è il parser XML con interfaccia DOM chiamato (nella versione 3.0) MSXML2.DOMDocument". Attraverso questo parser è possibile caricare un documento, salvarlo, elaborarlo, applicare un foglio di stile richiamando implicitamente il processore XSLT, ecc...
Vediamo un esempio di caricamento, elaborazione e salvataggio di un file XML all'interno di un programma scritto in JavaScript:
var doc = Server.CreateObject("MSXML2.DOMDocument");
doc.async = false;

doc.load("contatore.xml");
var valore = parseInt(doc.documentElement.getAttribute("contatore"));

doc.documentElement.setAttribute("count", valore + 1);
doc.save("contatore.xml");
Questo programma carica un file XML (attendendo che il file venga caricato prima di procedere), legge l'attributo "contatore" dell'elemento radice del documento, lo riscrive incrementato di uno e poi salva il file.
Per applicare una trasformazione XSLT bisogna caricare sia il documento, sia il foglio di stile all'interno di due parser, e poi si può utilizzare il metodo "transformNode" come nell'esempio (sempre in JavaScript all'interno di una pagina ASP):
<%@LANGUAGE=JScript%>
<%

  var xsl = Server.CreateObject("MSXML2.DOMDocument");
  var doc = Server.CreateObject("MSXML2.DOMDocument");
  xsl.async = false;
  doc.async = false; 

  xsl.load("documento.xsl");
  doc.load("documento.xml");
  Response.Write(doc.transformNode(xsl));

%>
La DLL contiene molti altri componenti e ha tutte le caratteristiche necessarie per semplificare lo sviluppo di un'applicazione basata su XML. Per ulteriori informazioni il sito da cui partire è http://msdn.microsoft.com/xml.

Utilizzo del parser SAX2 e del processore XSLT di Apache Java

Sul sito dell'Apache Software Foundation sono disponibili un parser XML e un processore XSLT, entrambi scritti sia in Java, sia in C++ e di pubblico dominio. Il parser XML si chiama Xerces, mentre il processore XSLT si chiama Xalan. Entrambi sono allineati alle ultime versioni degli standard. Xerces mette a disposizione sia un parser DOM, sia un parser SAX2. Un parser SAX2 non carica in memoria tutto il documento, ma lo carica invece una riga per volta, richiamando via via delle funzioni definite all'interno dell'applicazione che lo ha istanziato, passandogli quello che ha estratto dal file XML.
All'applicazione tocca il compito di implementare le funzioni che verranno richiamate da SAX2, in modo poi da poter elaborare quello che gli viene passato. Ad esempio, per ogni elemento che viene incontrato il parser richiamerà una funzione chiamata "StartElement" che la nostra applicazione dovrà aver predisposto. Per semplificare la scrittura di applicazioni Java sono stati preparati una serie di package che contengono tutte le classi necessarie per utilizzare il parser e per fornire le implementazioni vuote di tutte le funzioni che vengono richiamate. Quindi la nostra applicazione deve semplicemente importare i package, creare una classe derivata da "DefaultHandler", richiamare il parser passandogli come parametro la nostra classe.
Per maggiori informazioni si può fare riferimento al sito: http://www.apache.org

Utilizzo del parser SAX2 e del processore XSLT di Apache Java (esempio)

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.xerces.parsers.SAXParser;

public class miaClasse extends DefaultHandler
{
  //implementazione dei metodi che intercettano gli eventi  
  public void startDocument()
  {
    System.out.println("E' iniziato il documento");
  }
  
  public void endDocument()
  {
    System.out.println("E' finito il documento");
  }
  
  //fine implementazione dei metodi
  
  protected static final String PARSER_NAME =
    "org.apache.xerces.parsers.SAXParser";

  public static void main(String[] args) throws Exception
  {
    // creo la classe che intercettera` gli eventi
    miaClasse oggetto = new miaClasse(); 

    // creo il parser e lo lego all'oggetto
    XMLReader xmlrd = XMLReaderFactory.createXMLReader(PARSER_NAME);
    xmlrd.setContentHandler(oggetto); 

    // carico il file e richiamo gli eventi
    xmlrd.parse("file.xml");
  }
}
Per utilizzare il processore XSLT Xalan bisogna importare i package e applicare la trasformazione:
import org.apache.xalan.xslt.*;

XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
processor.process(new XSLTInputSource("*.xml"),
  new XSLTInputSource("*.xsl"),
  new XSLTResultTarget(System.out));

Informazioni sull'autore

Lorenzo Barbieri, Senior Trainer & Consultant è leader nella technology practice .NET in ObjectWay. Si occupa principalmente di formazione e consulenza su Microsoft .NET & DNA e XML & Web Services, ha tenuto interventi a svariate conferenze tecniche, come XML Days 2001 e SoftTech, ed è autore di numerosi articoli per le più importanti riviste specializzate di informatica.
Opera come Project Leader e Software Architect nello sviluppo di diverse applicazioni presso importanti società di Industria, Finanza e Telecomunicazioni.

È possibile consultare l'elenco degli articoli scritti da Lorenzo Barbieri.

Altri articoli sul tema Linguaggi / XML.

Discuti sul forum   Stampa

Cosa ne pensi di questo articolo?

Discussioni

Questo articolo o l'argomento ti ha interessato? Parliamone.