Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.

Ähnliche Präsentationen


Präsentation zum Thema: "FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen."—  Präsentation transkript:

1 FH-Hof 1 XML-Parser Richard Göbel

2 FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen. Objekt der Klasse 'DocumentBuilderFactory' konfigurieren. Objekt der Klasse 'DocumentBuilder' mit der MethodenewDocumentBuilder' erzeugen. Für Objekt der Klasse 'DocumentBuilder' den ErrorHandler registrieren (z.B. DefaultHandler). XML-Datei jetzt mit Hilfe der Methode 'parse' in ein Objekt vom Typ 'Document' einlesen.

3 FH-Hof 3 XML-Parser - Programmcode DocumentBuilderFactory dbf; dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(true); dbf.setIgnoringComments(true); dbf.setIgnoringElementContentWhitespace(true); dbf.setExpandEntityReferences(true); DocumentBuilder db; db = dbf.newDocumentBuilder(); db.setErrorHandler(new DefaultHandler()); Document doc = null; doc = db.parse(new File(inFile));

4 FH-Hof 4 XML-Parser - Aufbau eines Dokuments Ein Dokument ist ein Baum mit Objekten als Knoten, die das Interface Node erfüllen. Unter-Interfaces von Node sind zum Beispiel: Attr Comment Document Element Text Der Einstieg für ein Dokument ist ein Objekt vom Typ Document.

5 FH-Hof 5 XML-Parser- Methoden für Node getNodeType() liefert den Typ des Objekts als ganze Zahl (COMMENT_NODE, DOCUMENT_NODE, ELEMENT_NODE, TEXT_NODE) getNodeName() liefert den Namen eines Knotens. getChildNodes() liefert die Kinder (Objekt der Klasse NodeList) getLength(): Anzahl der Kinder item(int index): Zugriff auf Kind an der Position index getAttributes() liefert die Attribute als Objekt der Klasse NamedNodeMap (für ELEMENT_NODE). getNamedItem(String name): liefert Attributknoten getNodeValue() liefert den Wert eines Knotens.

6 FH-Hof 6 XML-Parser - Zugriff auf das Dokument... Document doc = db.parse(new File(inFile)); NodeList topNodes = doc.getChildNodes(); // DTD (falls vorhanden) Node docType = topNodes.item(0); // Topelement des Dokuments Node topElem = topNodes.item(1);...

7 FH-Hof 7 XML-Parser - Zugriff auf Bezeichnung und Text Node node;... // Bezeichnung des Elements... node.getNodeName()... // Textinhalt eines Elements... node.getChildNodes().item(0).getNodeValue()...

8 FH-Hof 8 XML-Parser - Zugriff auf Attribute und Kinder Node node;... NamedNodeMap attrs = node.getAttributes();... attrs.getNamedItem( ).getNodeV alue()... for (int index = 0; index < node.getLength(); index++) { // Kind an Position index... node.item(index)... }

9 FH-Hof 9 SAX-Parser - Simple API for XML Processing Ereignisgesteuerter Parser mit Methoden für das Einlesen von Elementen. Bei dem Lesen eines Elements wird die zugehörige Methode aufgerufen. Vorteile: Das Dokument muss nicht vollständig im Hauptspeicher dargestellt werden. Bereits bei dem Einlesen lassen sich Teile des Dokuments verarbeiten.

10 FH-Hof 10 SAX-Parser - Ansatz Objekt der Klasse 'SAXParserFactory' mit 'newInstance' erzeugen. Objekt der Klasse 'SAXParserFactory' konfigurieren. Objekt der Klasse 'SAXParser' mit 'newSAXParser erzeugen Objekt der Klasse 'XMLReader' mit Methode 'getXMLReader' von dem SAXParser' abgefragt. Handler für 'XMLReader' mit Methoden 'setErrorHandler' und 'setContentHandler' registrieren. Mit der Methode 'parse' der Klasse 'XMLReader' kann jetzt die Datei gelesen und verarbeitet werden.

11 FH-Hof 11 SAX-Parser - Programmcode SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setValidating(true); XMLReader xmlReader = null; SAXParser saxParser = spf.newSAXParser(); xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new MyContentHandler()); xmlReader.setErrorHandler(new DefaultHandler()); xmlReader.parse(inFile);

12 FH-Hof 12 SAX-Parser - Interface ContentHandler Interface ContentHandler fordert Methoden, die bei dem Einlesen eines XML-Dokuments aufgerufen werden. Die Klasse DefaultHandler stellt Default-Implementierungen für die Methoden von ContentHandler zur Verfügung. Der Entwickler implementiert in der Regel eine Unterklasse von DefaultHandler zum Beispiel mit den folgenden Methoden: startDocument endDocument startElement endElement characters

13 FH-Hof 13 SAX-Parser - StartElement, EndElement: Argumente attrs enthält die Attribute eines Elements (nur für StartElement) namespaceURI enthält einen Uniform Resource Identifier (URI) zur Festlegung des Namensraums. localName enthält den lokalen Namen innerhalb eines Namensraum. qName enthält den qualifizierten Namen mit dem vollständigen Präfix.

14 FH-Hof 14 SAX-Parser - characters: Argumente ch enthält ein Array mit Zeichen start enthält die Position des ersten gelesenen Zeichens length enthält die Länge der gelesenen Zeichenkette

15 FH-Hof 15 SAX-Parser - Aufbau eines ContentHandler public class MyContentHandler extends DefaultHandler { public MyContentHandler(...) {... } public void characters(char[] ch, int start, int length) {... } public void startDocument() throws SAXException {... } public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException{... } public void endElement(String namespaceURI, String localName, String qName) throws SAXException {... } public void endDocument() throws SAXException {... } }

16 FH-Hof 16 SAX-Parser - ContentHandler: rekursive Strukturen Aufbau einer Datenstruktur Stack zur Speicherung von Objekten zur internen Darstellung von Elementen Die Methode startElement erzeugt ein Objekt: Das erzeugte Objekt wird auf den Stack gelegt. Das erzeugte Objekt wird ggf. in die interne Struktur zur Darstellung des Dokuments eingefügt. Die Methode endElement löscht das oberste Element von Stack Das oberste Element des Stacks enthält das aktuelle Element, für das weitere Informationen eingelesen werden.

17 FH-Hof 17 Fehlerbehandlung - Definition eines Handlers class MyErrorHandler extends DefaultHandler { public void error(SAXParseException exception) {... } public void fatalError(SAXParseException exception) {... } public void warning(SAXParseException exception) {... }

18 FH-Hof 18 Fehlerbehandlung - SAXParseException Die Methode 'getColumnNumber' liefert die Nummer des Zeichens in der Zeile an der Fehlerposition. Die Methode 'getLineNumber' liefert die Nummer der Zeile der Fehlerposition. Mit den Methoden 'getPublicId' und 'getSystemId' kann die ID des Konstrukts mit dem Fehler abgefragt werden.


Herunterladen ppt "FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen."

Ähnliche Präsentationen


Google-Anzeigen