XML und Java Verarbeitung von XML-Dokumenten mit JAVA.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Kapselung , toString , equals , Java API
XML.
Anmerkungen zu XML Im September 2000 Entwicklung/Anspruch von XML
Ausnahmen HS Merseburg (FH) WS 06/07.
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
Java: Objektorientierte Programmierung
FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch.
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
XML-Parser Manuel Röllinghoff.
Document Object Model (DOM)
Speicherung von XML- Dokumenten als Large Objects.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Einführung in die Programmierung Datensammlung
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Die Persistenzschicht
Java programmieren mit JavaKara
Vom XML Schema zur relationalen Datenbank Seminararbeit zum Multimedia-Seminar im SS 2002 Erstellt von: Thomas Dickel.
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
Java für Fortgeschrittene
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Ausgabe vom Seite 1, XML Eine Einführung XML - Eine Einführung.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
2002 XML 10.1XML I (Parsing) 17.1XML II (XLST,XPATH) (keinPraktikum) 24.1XML III FOP 31.1Cocoon2, XSP 7.2Struts, Turbine, Velocity 14.2Testat / Evaluation.
Programmiervorkurs WS 2014/15 Methoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Programmiervorkurs WS 2014 Referenzdatentypen
Schnaiter XML in Java XML - Datei Zugriff mit Java.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
1 Java und XML Stephan Baldes Warum XML? In welchem Format wurden die Daten gespeichert? Bernd;Thomas;3;5;1987;Freiburg;Karlsruhe Peter;Maier;7;9;1980;Karlsruhe;Freiburg.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Dynamische Webseiten CGI & co. © CGI - Lösung für alle ? Ja CGI kann alles tun, was man für Anwendungen braucht flexibel (beliebige.
Import java.util.*; Hilfsklassen, die man eigentlich immer braucht.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Konstruktoren.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

XML und Java Verarbeitung von XML-Dokumenten mit JAVA

© Was ist zu tun ? Erzeugen von XML-Dokumenten einfach System.out.println(" "); System.out.println(" "); Logik steckt in Applikation Erzeugen der XML-Dokumente durch normale JAVA-IO Einlesen von XML ? manuell (Parser selbst schreiben) möglich (natürlich) aufwendig (insb. Validierung) fertigen Parser nehmen viele verschiedene (IBM, Microsoft, Apache,...) aber: Standard APIs --> austauschbar SAX und DOM (und JDOM ?)

© Warum verschiedene ? Warum nicht alles mit XSLT/DOM ? K:\JavaKurs\012 XML und Java>java Transform manycontacts.xml contact.xsl out.dat Dauer: 8922 ms K:\JavaKurs\012 XML und Java>java DOMTransform manycontacts.xml Dauer: 3445 ms K:\JavaKurs\012 XML und Java>java SAX2Transform manycontacts.xml Dauer: 2173 ms Unterschied im Speicherbedarf ist beinahe noch dramatischer: ca. 8 MB für SAX ca. 25 MB für DOM/XSLT Je nach Anwendung sollte/muß die passende Methode verwendet werden !

© SAX Simple API for XML kein offizieller (W3C,...) Standard aber weitverbreitet einfach schnell flexibel "Minimal-Parser" Event gesteuert Für verschiedene Elemente (Tag, Daten, Processing- Instruction,...) eines XML-Dokuments werden Events ausgelöst, die behandelt werden können

© SAX Prinzip XML- Dokument SAX Parser An- wendung Dokumen t Anfang Tag- Anfang Daten

© Verwendung SAX definiert Interfaces DocumentHandler EntityResolver DTDHandler ErrorHandler die vom Anwender implementiert werden SAX Version 2 (aktuell) liefert DefaultHandler, der erweitert wird damit nicht die vollst. Interfaces implementiert werden müssen, auch, wenn sie gar nicht von Interesse sind

© ContentHandler

© Ablauf der Events Zunächst startDocument kann überschrieben werden, meist nicht nötig Für jedes Tag wird startElement (mit Name des Elements und Attributen), dann typ. ein oder mehrmals characters (mit dem Text) und schließlich endElement (mit dem Namen des Elements) aufgerufen Verarbeitung je nachdem, typ. entweder Aufbau von Objekten, die den Elementen entsprechen oder Elementweise Bearbeitung

© Verwendung import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.ext.*; import org.xml.sax.helpers.*; public class SAX2Test extends DefaultHandler { public void startElement(String uri, String local, String raw, Attributes attrs) { out.println(local); } public void characters(char ch[], int start, int length) { String s = new String(ch,start,length); out.println(s); } public void endElement(String uri, String local, String qName) throws SAXException { out.println("End " + local); }...

© Wo kommt der Parser her ? // Dieser Teil ist eigentlich bei jeder Applikation gleich SAX2Test myContentHandler = new SAX2Test(); XMLReader parser = new org.apache.xerces.parsers.SAXParser(); parser.setFeature( " true); parser.setFeature( " true); parser.setContentHandler(myContentHandler); parser.setErrorHandler(myContentHandler); parser.parse(args[0]); // oder moderner/flexibler mit SAXParserFactory InputSource insource = new InputSource(new FileInputStream(Filename)); SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); factory.setNamespaceAware(true); SAXParser parser = factory.newSAXParser(); XMLReader xmlReader = parser.getXMLReader(); xmlReader.parse(insource);

© Arbeiten mit XML-Objekten Annahme: Informationen über Objekte (z.B. Artikel) in XML-Datei sollen in Anwendung bearbeitet werden wie ? Abbildung auf Java Objekte Kolbenrueckholfeder Kurbelwellenbeleuchtung... public class ArtikelListe { private Vector A; } public class Artikel { private String ID; private String Beschreibung; }

© Beispiel: Artikel public class ArtikelParser extends DefaultHandler { private ArtikelListe Liste; private Artikel A; private String buf; public void startElement(String uri, String local, String raw, Attributes attrs) { if (local.equals("ArtikelListe")) Liste = new ArtikelListe(); if (local.equals("Artikel")) { buf = new String(); String ID = attrs.getValue(0); // Hat nur ein Attribut - ID A = new Artikel(ID); } public void characters(char ch[], int start, int length) { buf+=new String(ch,start,length); } public void endElement(String uri, String local, String qName) { if (local.equals("Artikel")) { A.setBeschreibung(buf); Liste.add(A); }

© Artikel contd. Hier ziemlich einfache ("flache") Struktur Artikel enthält keine weiteren Elemente,... Gleiches Verfahren auch bei tieferen Hierarchien möglich z.B. Artikel kann Elemente 99 enthalten public class Artikel { private Vector Preise;... } public class Preis { private int Menge; private int Einzelpreis;... } Problem: Die Preis-Objekte müssen zuerst angelegt und zwischengespeichert, bevor das Artikel-Objekt fertig ist Lösung: Stack,...

© Generische Lösung Warum immer wieder von Hand programmieren ? public class Node { private String Name; private String Value; private HashTable attrs; private Vector Children; }... public void startElement(String uri, String local, String raw, Attributes attrs) { ElementStack.push(ActualNode); Node aNode = new Node; aNode.setName(local); aNode.setAttributes(attrs); ActualNode = aNode } public void endElement(String uri, String local, String qName) { ElementStack.top().addChild(ActualNode); ActualNode = ElementStack.pop(); } kann beliebige Objekthierarchien abbilden

© DOM Bildet XML-Dokument als Objekthierarchie ab Element Text CData

© DOM Objektmodell Alles ist ein Node (Basisklasse) abgeleitet Document Element Attribute CharacterData usw. Node hat Methoden getNodeName() getNodeValue() getAttributes() getChildNodes()...

© DOM contd. Abgeleitete Klassen/Interfaces haben entsprechende Attribute/Methoden z.B. Element getTagName() getAttribute(String Name) getElementsByTagName(String Name) Document getDocType() DTD getDocumentElement() Root Element des Dokuments

© Verwendung Flexibilität wird (auch hier) durch (etwas) Umständlichkeit erkauft ;-) DOMParser parser = new DOMParser(); parser.parse("contacts.xml"); Document document = parser.getDocument(); Element root = document.getDocumentElement(); NodeList L = root.getElementsByTagName("Artikel"); for(int i=0; i<L.getLength(); i++) { Element element = (Element)L.item(i); // Attribute, hier ID NamedNodeMap nm = element.getAttributes(); Node node = nm.getNamedItem("ID"); System.out.println(node.getNodeValue()); // Text. Leider wird der nicht direkt, sondern als eigener TextNode // gespeichert Node text = element.getChildNodes().item(0); System.out.println(text.getNodeValue()); }

© DOM kann aber mehr ! DOM kann auch modifizieren Document Objekt hat Methode create(String TagName) ! Element e = document.createElement("Artikel"); e.setAttribute("ID","1234"); e.appendChild(document.createTextNode("bla bla bla")); root.appendChild(e); Ausgabe mit XMLSerializer OutputFormat format = new OutputFormat( document ); StringWriter stringOut = new StringWriter(); XMLSerializer serial = new XMLSerializer( stringOut, format ); serial.asDOMSerializer(); serial.serialize( document.getDocumentElement() ); DOM kann viel mehr als SAX, ist aber etwas unübersichtlicher

© Vergleich SAX/DOM DOM bequem sehr bequem, wenn DOM Objektmodell paßt langsam hoher Speicherbedarf SAX schnell Objektmodell wird durch Anwender erstellt schlecht, weil zus. Aufwand u.U. gut, wenn DOM Modell nicht paßt Eingriffe in die Validierung möglich z.B. eigene (zusätzliche) Validierung möglich Fehlerstelle (Zeile, Spalte,...) bekannt