Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Malnati, 2003-04
SAX e DOM
Programmazione in
Ambienti Distribuiti
A.A. 2003-04
Analisi di un documento
w1
Analisi di documenti XML
Parser XML
Esistono due approcci differenti per la realizzazione
di un parser:
© M. Badella G. Malnati, 2003-04
w2
XML e Java
Validazione
w3
SAX
SAX
Eventi segnalati:
¾ Inizio e fine del documento
© M. Badella G. Malnati, 2003-04
w4
Java e SAX
¾ org.xml.sax
¾ org.xml.sax.ext
¾ org.xml.sax.helpers
Contengono le classi e le interfacce
necessarie alla creazione e alla gestione di
un parser SAX
Java e SAX
javax.xml.parser
¾ Contiene SAXParserFactory che definisce
© M. Badella G. Malnati, 2003-04
w5
Creazione di un parser
I parser XML sono creati utilizzando il Factory Design
Pattern
¾ Si crea un oggetto parser a partire da un oggetto factory
© M. Badella G. Malnati, 2003-04
Esempio (1)
class MyHandler extends DefaultHandler {
int errorCounter=0;
© M. Badella G. Malnati, 2003-04
w6
Esempio (2)
SAXParserFactory spf=
SAXParserFactory.newInstance();
spf.setValidating(true);
© M. Badella G. Malnati, 2003-04
SAXParser p= spf.newSAXParser();
MyHandler h= new MyHandler(…);
FileInputStream fis = new
FileInputStream(“c:\test.xml”);
p.parse(fis,h);
System.out.println(h.getErrorCounter());
Applicazioni di SAX
w7
DOM
sintattico
¾ L’albero gerarchico rappresenta il documento
¾ Supporta la navigazione e la modifica del documento
Le specifiche sono indipendenti dal linguaggio
¾ Java, C++, CORBA, JavaScript,…
Sito ufficiale
¾ http://www.w3c.org/DOM
L’albero sintattico
Document
© M. Badella G. Malnati, 2003-04
w8
Java e DOM
¾ org.w3c.dom
Contengono le classi e le interfacce
necessarie per
¾ creazione di un parser DOM
¾ gestione e modifica dell’albero generato dal
parsing
Java e DOM
javax.xml.parser:
¾ DocumentBuilderFactory definisce la factory che
consente all’applicazione di ottenere il parser DOM
© M. Badella G. Malnati, 2003-04
w9
Creazione di un parser
Analogamente a SAX, il parser DOM è creato
utilizzando il Factory Design Pattern
© M. Badella G. Malnati, 2003-04
Esempio
…
String filename=“c:\test.xml”;
© M. Badella G. Malnati, 2003-04
DocumentBuilderFactory buildFactory=
DocumentBuiderFactory.newInstance();
DocumentBuider builder=
buildFactory.newDocumentBuilder();
buidFactory.setValidating(true);
Document doc=builder.parse(filename);
doc.getDocumentElement().normalize();
…
w10
Navigazione dell’albero
Elemento radice:
Element root=doc.getDocumentElement();
Element è una sottoclasse di Node e rappresenta
© M. Badella G. Malnati, 2003-04
un elemento XML
È possibile ottenere:
¾ Il nome (getNodeName)
¾ Il tipo (getNodeType)
¾ Gli attributi (getAttributes)
¾ …
Modificare la struttura del documento
¾ Assegnazione di testo ad un elemento (setNodeValue)
¾ Nuovo nodo figlio (appendChild)
¾ Eliminazione nodo figlio (removeChild)
¾ … 21
Programmazione in Ambienti Distribuiti
Vantaggi e Svantaggi
Vantaggi
¾ API robusta
© M. Badella G. Malnati, 2003-04
w11
Altre implementazioni
w12