Folien - Fakultät Informatik Uni Stuttgart

Werbung
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Java: Kapitel 9
Java und XML
Programmentwicklung WS 2008/2009
Holger Röder
[email protected]
© Holger Röder
„
„
„
„
Einführung in XML
XML-Verarbeitung in Java
Document Object Model (DOM)
JDOM
† Ein- und Ausgabe von XML-Dateien
† Navigation im DOM-Baum
† Änderung von XML-Dokumenten
Programmentwicklung
Winter 2008/2009
Überblick über Kapitel 9
se
2
© Holger Röder
Winter 2008/2009
eXtensible Markup Language (XML)
„ XML ist eine Auszeichnungssprache zur Strukturierung von Daten.
„ Ein XML-Dokument besteht aus Elementen.
† Elemente werden durch Tags gekennzeichnet:
<element> … </element>
† Elemente können Text oder (hierarchisch geschachtelt) weitere
Elemente enthalten.
† Elemente können Attribute besitzen.
Programmentwicklung
Element Person
se
<Person PersonalNr="007">
<Name>Coder</Name>
Attribut PersonalNr
<Vorname>Carl</Vorname>
<Adresse>
<Strasse>Hauptstraße 3</Strasse>
<Plz>70569</Plz>
Text
<Stadt>Stuttgart</Stadt>
</Adresse>
</Person>
3
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Eigenschaften von XML-Dokumenten
„ XML-Dokumente sind durch Elemente mit Inhalten und/oder Attributen
hierarchisch strukturiert
„ XML-Dokumente sind wohlgeformt:
† Jedes Element besteht aus Anfangs- und End-Tag oder aus einem
einzelnen abgeschlossenen Tag
<Student>…</Student> oder <Student />
† Genau ein „Wurzelelement“ enthält alle weiteren Elemente
† Öffnende und schließende Tags sind symmetrisch angeordnet
<Person>…<Name>…</Name>…</Person>
„ Sonderzeichen im Text werden als Entitäten codiert
& < > etc. codiert als & < > etc.
„ XML-Dokumente können Kommentare enthalten
<!-- Kommentar -->
„ XML-Dokumente können (als erste Zeile) eine Kopfdefinition enthalten
<?xml version="1.0"?>
„ Die Struktur konkreter XML-Dokumente kann durch Document Type
Definitions (DTD) oder XML Schemas definiert werden.
4
© Holger Röder
Winter 2008/2009
Programmentwicklung
Beispiel: XML-Dokument
<?xml version="1.0" encoding="utf-8"?>
<PersonenListe>
<Person PersonalNr="007">
<Name>Clement</Name>
Hierarchische Anordnung
Wurzelelement
von Elementen
<Vorname>Carl</Vorname>
PersonenListe
<Adresse>
<Strasse>Hauptstraße 3</Strasse>
<Plz>70569</Plz>
<Stadt>Stuttgart</Stadt>
</Adresse>
</Person>
<Person PersonalNr="008">
<Name>Ahrens</Name>
<Vorname>Annemarie</Vorname>
<Adresse>
<Strasse>Heilbronnerstr. 44</Strasse>
<Plz>70806</Plz>
<Stadt>Kornwestheim</Stadt>
</Adresse>
Person mit
<Adresse>
zwei Adressen
<Strasse>Piazza di Lago</Strasse>
<Plz>I-30672</Plz>
<Stadt>Sirmione</Stadt>
</Adresse>
</Person>
</PersonenListe>
se
5
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Java und XML
„ Java unterstützt beim Umgang mit XML-Dokumenten drei verschiedene
Verabeitungsarten.
„ DOM-basierte APIs: Das komplette XML-Dokument wird als
Baumstruktur (Document Object Model) im Speicher repräsentiert.
Æ W3C-DOM, JDOM, dom4j
„ Ereignisbasierte Push-APIs: Der XML-Parser ruft Methoden auf, wenn
bestimmte Bestandteile des XML-Dokuments (öffnende/schließende
Tags, Text etc.) gelesen werden (Callback-Prinzip).
Æ SAX (Simple API for XML)
„ Pull-APIs: Die einzelnen Bestandteile des XML-Dokuments werden „auf
Anfrage“ sequentiell vom XML-Parser geholt.
Æ StAX (Streaming API for XML)
„ Häufig werden auch Kombinationen dieser Ansätze eingesetzt.
„ Unter der Abstraktionsschicht Java API for XML Processing (JAXP)
sind im JDK verschiedene XML-Technologien zusammengefasst.
6
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Document Object Model – DOM-Baum
…
<Person PersonalNr="007">
<Name>Clement</Name>
<Vorname>Carl</Vorname>
Document
<Adresse>
<Strasse>Hauptstraße 3</Strasse>
<Plz>70569</Plz>
<Stadt>Stuttgart</Stadt>
PersonenListe
</Adresse>
</Person>
…
1. Person
PersonalNr
Name
Vorname
"007"
2. Person
etc.
"Clement"
7
© Holger Röder
„ JDOM ist eine DOM-basierte Java-Bibliothek für die Verarbeitung von
XML-Dateien.
„ JDOM ist ein Open-Source-Projekt: http://www.jdom.org
„ Die vorgestellten JDOM-Klassen liegen im Paket org.jdom oder in
Unterpaketen.
Programmentwicklung
Winter 2008/2009
JDOM
se
8
© Holger Röder
Winter 2008/2009
XML-Dokumente erzeugen und ausgeben
„ Die zentrale Klasse org.jdom.Document repräsentiert ein XMLDokument.
„ Vorhandene XML-Dateien können als XML-Dokument eingelesen
werden:
// Leeres XML-Dokument erzeugen
Document emptyDoc = new Document();
XML-Datei parsen,
DOM-Baum erzeugen
// Existierende XML-Datei als Dokument einlesen
Document doc = new SAXBuilder().build("PersonenListe.xml");
Programmentwicklung
„ XML-Dokumente können einfach ausgegeben werden:
se
XMLOutputter outputter = new XMLOutputter();
// Ausgabe auf die Konsole
outputter.output(doc, System.out);
Ausgabe-Objekt übernimmt
Formatierung etc.
// Ausgabe in eine Datei
outputter.output(doc, new FileOutputStream("PersonenListe2.xml"));
9
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
XML-Elemente
„ Die Klasse Element repräsentiert ein XML-Element im Dokument.
„ Über die Methode Document.getRootElement() kann das
Wurzelelement ermittelt werden.
„ Ausgehend von einem Element kann zu untergeordneten Elementen
im DOM-Baum navigiert werden:
† boolean hasChildren() – Unterelemente vorhanden?
† Element getChild(String name) liefert das erste
Unterelement mit dem angegebenen Namen.
† List getChildren(String name) liefert eine Liste aller
Unterelemente mit dem angegebenen Namen.
„ Der Text eines Elements kann mit String getText() ermittelt
werden.
Element Person,
Unterelement Name
<Person PersonalNr="007">
<Name>Clement</Name>
...
Text des Name-Elements
10
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Attribute
„ Ein Element kann Attribute besitzen:
† Attribute getAttribute(String name) liefert das Attribut
mit dem angegebenen Namen
† List getAttributes() liefert alle Attribute eines Elements als
Liste
Attribut PersonalNr
des Elements Person
<Person PersonalNr="007">
<Name>Clement</Name>
...
„ Attribute repräsentiert ein Attribut eines Elements.
† String getValue() liefert den Wert des Attributs
† int getIntValue() liefert den Wert als int-Wert (analog für
andere primitive Datentypen)
11
© Holger Röder
Winter 2008/2009
Navigation im DOM-Baum
...
<Person PersonalNr="007">
<Name>Clement</Name>
<Vorname>Carl</Vorname>
Document
<Adresse>
<Strasse>Hauptstraße 3</Strasse>
getRootElement()
<Plz>70569</Plz>
<Stadt>Stuttgart</Stadt>
PersonenListe
</Adresse>
</Person>
...
getChildren("Person")
Programmentwicklung
1. Listenelement
se
1. Person
getChild("Name")
2. Listenelement
PersonalNr
getAttribute("PersonalNr")
"007"
2. Person
getValue()
Name
getText()
"Clement"
12
© Holger Röder
Winter 2008/2009
Programmentwicklung
se
Änderung des XML-Dokuments
„ Elemente und Attribute eines XML-Dokuments können mit JDOM
beliebig erzeugt und verändert werden.
Document doc = new Document();
Element personenListe = new Element("PersonenListe");
doc.setRootElement(personenListe);
Element person1 = new Element("Person");
Attribute personalNr1 = new Attribute("PersonalNr", "08/15");
person1.setAttribute(personalNr1);
Element vorname1 = new Element("Vorname");
vorname1.setText("Carl");
person1.addContent(vorname1);
Mehr zur JDOM-API:
http://www.jdom.org/docs/apidocs/
<?xml version="1.0" encoding="UTF-8"?>
<PersonenListe>
<Person PersonalNr="08/15">
<Vorname>Carl</Vorname>
</Person>
</PersonenListe>
13
Herunterladen