Looking for java Keywords? Try Ask4Keywords

Java LanguageXML-Analyse mit den JAXP-APIs


Bemerkungen

XML-Parsing ist die Interpretation von XML-Dokumenten, um ihren Inhalt mithilfe sinnvoller Konstrukte zu manipulieren, entweder "Knoten", "Attribute", "Dokumente", "Namespaces" oder Ereignisse, die sich auf diese Konstrukte beziehen.

Java verfügt über eine native API für die XML-Dokumentenverarbeitung, die als JAXP oder Java-API für die XML-Verarbeitung bezeichnet wird . JAXP und eine Referenzimplementierung sind seit Java 1.4 (JAXP v1.1) in jeder Java-Version enthalten und haben sich seitdem weiterentwickelt. Java 8 wird mit JAXP Version 1.6 ausgeliefert.

Die API bietet verschiedene Möglichkeiten für die Interaktion mit XML-Dokumenten.

  • Die DOM-Schnittstelle (Document Object Model)
  • Die SAX-Schnittstelle (Simple API for XML)
  • Die StAX-Schnittstelle (Streaming-API für XML)

Prinzipien der DOM-Schnittstelle

Die DOM-Schnittstelle soll eine W3C-DOM- kompatible Methode zur Interpretation von XML bieten. Verschiedene Versionen von JAXP haben verschiedene DOM-Spezifikationsebenen (bis zu Stufe 3) unterstützt.

Unter der Document Object Model-Schnittstelle wird ein XML-Dokument beginnend mit dem "Dokumentelement" als Baum dargestellt. Der Basistyp des API ist die Node - Typ, es von einem navigieren können Node zu seinem übergeordneten, seine Kinder oder seine Geschwister (obwohl nicht alle Node s Kinder haben kann, beispielsweise Text - Knoten endgültig in dem Baum sind, und niemals Kinder haben). XML-Tags werden als Element s dargestellt, wodurch der Node durch attributbezogene Methoden erweitert wird.

Die DOM-Schnittstelle ist sehr nützlich, da sie ein "einzeiliges" Parsing von XML-Dokumenten als Baumstrukturen ermöglicht und die einfache Modifizierung des erstellten Baums (Knotenzusatz, Unterdrückung, Kopieren, ...) und schließlich dessen Serialisierung (Back to Disk) ermöglicht ) nach Änderungen. Dies hat jedoch einen Preis: Der Baum befindet sich im Arbeitsspeicher. Daher sind DOM-Bäume für große XML-Dokumente nicht immer praktisch. Außerdem ist die Konstruktion des Baums nicht immer die schnellste Methode, um mit XML-Inhalten umzugehen, insbesondere wenn man nicht an allen Teilen des XML-Dokuments interessiert ist.

Prinzipien der SAX-Schnittstelle

Die SAX-API ist eine ereignisorientierte API für den Umgang mit XML-Dokumenten. Bei diesem Modell werden die Komponenten eines XML-Dokuments als Ereignisse interpretiert (z. B. "Ein Tag wurde geöffnet", "Ein Tag wurde geschlossen", "Ein Textknoten wurde gefunden", "Ein Kommentar wurde gefunden"). ..

Die SAX-API verwendet einen "Push-Parsing" -Ansatz, bei dem ein SAX- Parser für die Interpretation des XML-Dokuments verantwortlich ist und Methoden auf einem Delegaten (einem ContentHandler ) ContentHandler , um mit allen Ereignissen im XML-Dokument umzugehen. Normalerweise schreibt man nie einen Parser, aber man stellt einen Handler bereit, um alle benötigten Informationen aus dem XML-Dokument zu erhalten.

Die SAX-Schnittstelle überwindet die Einschränkungen der DOM-Schnittstelle, indem nur die minimal erforderlichen Daten auf Parser-Ebene (z. B. Namespaces-Kontexte, Validierungsstatus) beibehalten werden. Daher sind nur Informationen, die vom ContentHandler aufbewahrt werden ContentHandler für die Sie als Entwickler verantwortlich sind, verantwortlich in Erinnerung gehalten. Der Kompromiss besteht darin, dass es mit einem solchen Ansatz keine Möglichkeit gibt, "in der Zeit zurück zu gehen / das XML-Dokument": Während DOM einem Node erlaubt, zu seinem übergeordneten Element zurückzukehren, gibt es keine solche Möglichkeit in SAX.

Prinzipien der StAX-Schnittstelle

Die StAX-API verfolgt einen ähnlichen Ansatz für die Verarbeitung von XML wie die SAX-API (dh ereignisgesteuert). Der einzige sehr wichtige Unterschied besteht darin, dass StAX ein Pull-Parser ist (bei dem SAX ein Push-Parser war). In SAX hat der Parser Kontrolle und verwendet Callbacks für den ContentHandler . In Stax rufen Sie den Parser auf und steuern, wann das nächste XML-Ereignis abgerufen werden soll.

Die API beginnt mit XMLStreamReader (oder XMLEventReader ). Hierbei handelt es sich um die Gateways, über die der Entwickler nextEvent() in einer Iterator-Art fragen kann.

XML-Analyse mit den JAXP-APIs Verwandte Beispiele