Java und XML Stephan Baldes 14.04.2008 1 Warum XML? In welchem Format wurden die Daten gespeichert? CSV (Comma-Separated Values) Bernd;Thomas;3;5;1987;Freiburg;Karlsruhe Peter;Maier;7;9;1980;Karlsruhe;Freiburg Im CSV-Format ist die Bedeutung der Daten nicht bekannt. 2 Java und XML Was ist XML? 3 XML: EXtensible Markup Language • 1998: XML-Spezifikation World Wide Web Consortium (W3C) • Darstellung hierarchisch strukturierter Daten in Form von Text. • Austausch von Daten zwischen verschiedenen Systemen: Menschen- und maschinenlesbar. • Idee: Trennung von Inhalt und Darstellung. • Techniken: DTD, Schema, XSLT, XPATH,... 4 XML: EXtensible Markup Language book ↔ <Qty unit="g"></Qty> 5 XML: EXtensible Markup Language <?xml version="1.0" encoding="ISO-8859-1" ?> <wikipedia> <titel>Wikipedia Städteverzeichnis</titel> <!-- Jetzt folgen alle Städte --> <eintrag> <stichwort>Genf</stichwort> <eintragstext>Genf ist der Sitz von ...</eintragstext> </eintrag> <eintrag> <stichwort>Köln</stichwort> <eintragstext>Köln ist eine Stadt, die ...</eintragstext> </eintrag> </wikipedia> • Ausdrücke sind wohlgeformt. • Meta-Tags, Kommentare • Das Dokument enthält nur ein Wurzelelement. 6 Arbeitsauftrag CSV-Datei in wohlgeformtes XML-Dokument umwandeln Kopieren Sie die Datei adressliste.csv aus dem Vorlagenlaufwerk und wandeln Sie sie in ein wohlgeformtes XML-Dokument um. Speichern Sie die Datei unter dem Namen adressliste.xml und öffnen Sie sie im Firefox. Zeit: 5 Minuten 7 Java und XML XML-Verarbeitung in Java 8 XML-Verarbeitung in Java • JDK stellt ab Version 1.4 alle benötigten Technologien bereit. • Zwei Ansätze: • SAX: Simple API for XML public void startElement(String name, …) { System.out.println("Start element: " + name); } … • DOM:Document Object Model • Andere Ansätze: StAX, JDOM, XSLT, XPATH, … 9 SAX •XMLReader xr = XMLReaderFactory.createXMLReader(); xr.parse(new InputSource(new FileReader("Personen.xml"))); • public void startElement(…,String name, Attributes atts) { System.out.println("Start element: " + name); } • public void endElement(…,String name, Attributes atts) { System.out.println("End element: " + name); } • public void characters(char ch[], …) { System.out.println("Content: " + String.valueOf(ch));} 10 SAX Beispiel 11 SAX Beispiel 12 DOM • DocumentBuilderFactory factory = … DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(…"Personen.xml"...); • Node root = document.getFirstChild(); • NodeList personListe = root.getChildNodes(); • Node aktuellePerson = personListe.item(i); • String tagName = aktuellesTag.getNodeName(); • String tagInhalt = aktuellesTag.getTextContent(); 13 DOM Beispiel 14