Laboratorio di Servizi Web - XML - Ardissono
1
Rappresentazione ad oggetti di documenti XML
• Parser fanno analisi sintattica di documento XML ma, a meno di utilizzare metodi indiretti (come eventi di SAX parser) non permettono manipolazione diretta del documento
introdotte rappresentazioni strutturate che permettono di analizzare e modificare contenuto di documento
• W3C ha definito specifiche di rappresentazione strutturata di documento XML
– Documenti XML sono gerarchici (tag annidati) rappresentazione ad albero
– Elementi, attributi, etc. rappresentati come nodi di albero
Laboratorio di Servizi Web - XML - Ardissono
2
DOM - Document Object Model - I
• W3C standard per gestione di documenti XML– rappresenta i documenti con un modello ad oggetti
– specifica interfaccia per accedere a parti di documenti e “navigarli”
– rappresentazione DOM si basa su struttura ad albero
<pizza> <topping> peperoni </topping> <price> 8.00 </price> <size> large </size></pizza>
Document
pizza
topping price size
Root element
Child elements
Laboratorio di Servizi Web - XML - Ardissono
3
DOM - Document Object Model - II• Molti parser sono conformi a DOM (es. JAXP) usano
rappresentazione DOM per gestire documenti • DOM interfaccia produttori di parser hanno
sviluppato implementazioni• org.w3c.dom• DOM usa interfaccia Node (e più specifici, come
Element), che rappresenta i nodi dell’albero di un documento e offre metodi per:– trovare i nodi figli di un nodo– aggiungere figli ad un nodo– leggere il valore contenuto in un nodo, ...
• documento si ispeziona (e modifica) navigando albero a partire da radice
Vedere Tutorial (JAXP) per maggiori
informazionisu DOM
Laboratorio di Servizi Web - XML - Ardissono
4
Creazione di DOM• dal nulla, creando i nodi e inserendoli nell’albero• parsificando documento XML (e.g., via SAX parser)
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException;import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.w3c.dom.Document; import org.w3c.dom.DOMException; ...
public class DomEcho01{ static Document document; public static void main(String argv[]) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(true); try {DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse( “coffee.xml” ); } catch (SAXParseException spe) {System.out.println("\n** Parsing error”); ….. Gestione di altre eccezioni... } }
Laboratorio di Servizi Web - XML - Ardissono
5
Visita di oggetto DOM public static void visitDocument(Document document, String feature) { if (document!=null) { Element el = document.getDocumentElement(); visit(el, feature);}} public static void visit(Node el, String feature) { if (el!=null) { NodeList children = el.getChildNodes();
for (int i=0; i<children.getLength(); i++) {Node n=children.item(i);getFeatureVal(n, feature);visit(children.item(i), feature);}}}
public static void getFeatureVal(Node domNode, String feature) { String out = ""; if (domNode!=null) {
String name = domNode.getNodeName(); String type = typeName[domNode.getNodeType()];
if (name.equals(feature)) { Element el = (Element)domNode;
out = el.getFirstChild().getNodeValue(); System.out.println("The value of feature "+feature+ " is: " +out);} }}
Laboratorio di Servizi Web - XML - Ardissono
6
DOM vs. JDOM e altri….
• DOM nato per trattare documenti – document-oriented, focalizzato sulle parti di cui un
documento si compone– gestione di strutture dati possibile, ma un po’ ostica sviluppati altri modelli di rappresentazione che facilitano
accesso e modifica. Es: JDOM, DOM4J
• Trascuriamo DOM, JDOM, etc. per focalizzarci su uno strumento recente, più efficace nel trattamento di strutture dati: JAXB
• JAXB (Java Architecture for XML Binding) nato apposta per trattare rappresentazione XML di strutture dati
Top Related