se XML und Java se - Institut für Softwaretechnologie

Werbung
se
XML und Java
Rainer Schmidberger
[email protected]
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
Seminarunterlagen XML und Java
se
Was ist XML?
<Person PersonalNr="007">
<Name>Müller</Name>
<Vorname>Hans</Vorname>
<Adresse>
<Strasse>Ulmenweg 22</Strasse>
<Plz>70565</Plz>
<Stadt>Stuttgart</Stadt>
</Adresse>
</Person>
‰
‰
‰
‰
‰
‰
‰
‰
‰
‰
09.02.2004
EXtensible Markup Language
XML ist plattformneutral
XML ist sprach-unabhängig
Strukturierung des XMLDokuments mittels "Tags"
Wohlgeformtheit: öffnende
und schließende Tags sind
symmetrisch angeordnet
Beliebig hierarchischer Aufbau
Daten und Struktur-Information
werden gemeinsam
gespeichert
Dadurch: "selbsterklärend"
"Schablone regelt den Aufbau
(DTD=Document Type
Definition)
Möglichkeit zu Konsistenzregeln
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
2
1
Seminarunterlagen XML und Java
se
Java – XML
‰ DOM: Document Object Model
Ö
Ö
Ö
Ö
Ö
Ö
Standardisierung der W3C (www.w3.org/tr)
Seit JDK 1.4 in Java enthalten
Interface-Sammlung
Implementierung erfolgt durch XML-Parser
Einfaches Auslesen und Bearbeiten von XML-Dokumenten
I/O-Operationen über JAXP (Java API for XML-Processing)
‰ SAX: Simple API for XML Parsing
Ö Ereignis-basiertes Modell (event based)
Ö Mittels "Callback" werden Ereignisse beim Parsen an einen
Event-Handler übermittelt
‰ JDOM
Ö
Ö
Ö
Ö
09.02.2004
Java-zentriert, objektorientiert
Geringfügige Vereinfachung des DOM API
"As simple as Java itself"
Java-Sammlungsklassen statt der DOM Node-Klassen
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
3
Seminarunterlagen XML und Java
se
XML-Dokument
<PersonenListe>
<Person PersonalNr="007">
<Name>Müller</Name>
<Vorname>Hans</Vorname>
<Adresse>
<Strasse>Ulmenweg 22</Strasse>
<Plz>70565</Plz>
<Stadt>Stuttgart</Stadt>
</Adresse>
</Person>
<Person PersonalNr="008">
<Name>Mustermann</Name>
<Vorname>Annemarie</Vorname>
<Adresse>
<Strasse>Heilbronnerstr. 44</Strasse>
<Plz>70806</Plz>
<Stadt>Kornwestheim</Stadt>
</Adresse>
<Adresse>
<Strasse>Piazza di Lago</Strasse>
<Plz>I-30672</Plz>
<Stadt>Sirmione</Stadt>
</Adresse>
</Person>
</PersonenListe>
09.02.2004
Wohlgeformtheit
Attribut im
öffnenden Tag
Person mit zwei
Adressen
Dokument
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
4
2
Seminarunterlagen XML und Java
se
XML Prozessor
‰
User Interface
Weitere
Ausgaben
Applikation
‰
‰
Schnittstelle
zwischen
Applikation
und
Prozessor
‰
‰
Prozessor
‰
‰
Üblicherweise auch als
"Parser" bezeichnet
Liest XML Dokumente
Ermöglicht den Zugriff auf das
Dokument
Unterscheidung in
Validierende und nichtvalidierende Prozessoren
Ein-/Ausgabe des XMLDokuments ist Teil der
Applikation nicht des
Prozessors
Die Applikation verwendet
den Prozessor
Der Prozessor erstellt einen
Graphen, der den Dokument
Inhalt abbildet
XML
Dokument
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
5
Seminarunterlagen XML und Java
se
DOM: Dokument-Baum
<PersonenListe>
<Person PersonalNr="007">
<Name>Müller</Name>
<Vorname>Hans</Vorname>
<Adresse>
<Strasse>Ulmenweg 22</Strasse>
<Plz>70565</Plz>
<Stadt>Stuttgart</Stadt>
</Adresse>
</Person>
...
</PersonenListe>
Document
getDocumentElement
PersonenListe
item(...)
item(0)
1. Person
getFirstChild
Name
PersonalNr =
007
09.02.2004
2. Person
getNamedItem("PersonalNr")
Vorname
getFirstChild
Müller
item(1)
Adresse
getNextSibling
Hans
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
6
3
Seminarunterlagen XML und Java
se
DOM Knoten
‰ Knoteninhalt
Ö
Ö
Ö
Ö
Typ
Name
Wert
Attribute
‰ Dokumentstruktur
Ö
Ö
Ö
Ö
Ö
Ö
09.02.2004
Elternknoten
Erster Kindknoten
Letzter Kindknoten
Nächster Geschwisterknoten
Voriger Geschwisterknoten
Liste aller Kindknoten
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
7
Seminarunterlagen XML und Java
se
DOM Node-Klassen
‰ Paket org.w3c.dom
Node
Type : int
Name : String
Value : String
NodeList
Element
Attr
CharacterData
NamedNodeMap
Document
DocumentType
DocumentFragment
Text
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
8
4
Seminarunterlagen XML und Java
se
DOM API (1)
‰ Accessor Methoden
Ö getNodeName(), getNodeType(), getNodeValue()
Ö setNodeValue(String)
‰ Navigation im Dokument
Ö getParent(), getFirstChild(), getLastChild(),
getPreviousSibling(), getNextSibling()
Ö getAttributes : NamedNodeMap
Ö getChildNotes() : NodeList
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
9
Seminarunterlagen XML und Java
se
DOM API (2)
‰ Änderung eines Dokuments
Ö appendChild(Node), insertBefore(Node, Node)
Ö replaceChild(node, Node)
Ö removeChild(Node)
‰ Elemente erzeugen
Ö createElement(String), createAttribute(String),
createTextNode(String)
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
10
5
Seminarunterlagen XML und Java
se
javax.xml.parsers
// das Factory-Objekt erzeugen
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
// Parser-Objekt durch die Factury erzeugen
db = dbf.newDocumentBuilder();
} catch(Exception e) {
...
}
Document doc = null;
try {
// Dokument parsen
doc = db.parse("PersonenListe.xml");
}
catch(Exception e) {
...
}
// das Dokument auswerten oder bearbeiten
Element personenListeElement = doc.getDocumentElement();
NodeList personenNodeList = personenListeElement.getElementsByTagName("Person");
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
11
Seminarunterlagen XML und Java
se
XML als Baum auslesen
static private void leseXMLKnoten(Node n) {
System.out.print(" Knotenname = " + n.getNodeName());
String val = n.getNodeValue();
if(val != null && !val.equals("")) {
System.out.print(" Knotenwert =" + val);
}
System.out.println();
for(Node kindKnoten = n.getFirstChild();
kindKnoten != null;
kindKnoten = kindKnoten.getNextSibling()) {
leseXMLKnoten(kindKnoten);
}
‰ Baumstruktur des
XML-Dokuments
legt eine rekursive
Auswertung nahe
‰ Aber: lineare
Auswertung z.B.
über alle Kinder
eines Knotens ist
ebenso möglich
}
09.02.2004
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
12
6
Seminarunterlagen XML und Java
se
XML linear auslesen
Element personenListeElement = doc.getDocumentElement();
NodeList personenNodeList = personenListeElement.getElementsByTagName("Person");
for(int i = 0; i < personenNodeList.getLength(); i++) {
Node personNode = personenNodeList.item(i);
System.out.println(i + ". Person ----------------------------------");
NodeList personNodeChildNodes = personNode.getChildNodes();
for(int j = 0; j < personNodeChildNodes.getLength(); j++) {
Node personElementNode = personNodeChildNodes.item(j);
Node personElementNodeValue = personElementNode.getFirstChild();
if(personElementNodeValue != null) {
System.out.println(" Knotenname = " + personElementNode.getNodeName() +
" Knotenwert = " + personElementNodeValue.getNodeValue());
}
}
}
Ausgabe:
09.02.2004
0. Person ---------------------------------Knotenname = Name Knotenwert = Müller
Knotenname = Vorname Knotenwert = Hans
Knotenname = Adresse Knotenwert =
1. Person ---------------------------------Knotenname = Name Knotenwert = Mustermann
Knotenname = Vorname Knotenwert = Annemarie
Knotenname = Adresse Knotenwert =
Knotenname = Adresse Knotenwert =
Adresse hat
nicht einen
unmittelbaren
"value"
Copyright © 2004, Rainer Schmidberger, Universität Stuttgart, Institut für Softwaretechnologie, Abt. Software Engineering
13
7
Herunterladen