Arbeiten mit XML in Java: DOM, SAX, StAX und JAXB

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit XML in Java: DOM, SAX, StAX und JAXB



XML (eXtensible Markup Language) bleibt eines der wichtigsten Formate zum Speichern und Übertragen strukturierter Daten. In Java gibt es mehrere Möglichkeiten, mit XML zu arbeiten, die jeweils für unterschiedliche Aufgaben geeignet sind: vom Lesen kleiner Konfigurationen bis zur Verarbeitung von Gigabyte-großen Dateien. In diesem Artikel betrachten wir vier grundlegende Ansätze: DOM, SAX, StAX und JAXB.



1. DOM (Document Object Model) — vollständiges Laden in den Speicher



Der DOM-Parser lädt das gesamte XML-Dokument in den Speicher und erstellt eine baumartige Struktur. Dies ist praktisch für Navigation und Änderungen, aber ineffizient für große Dateien.



Beispiel zum Lesen von XML mit DOM:



import javax.xml.parsers.*;import org.w3c.dom.*;

public class DomExample { public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("books.xml");

NodeList bookList = doc.getElementsByTagName("book"); for (int i = 0; i < bookList.getLength(); i++) { Element book = (Element) bookList.item(i); String title = book.getElementsByTagName("title").item(0).getTextContent(); String author = book.getElementsByTagName("author").item(0).getTextContent(); System.out.println("Buch: " + title + ", Autor: " + author); } }}


  • Vorteile: bequemer Zugriff auf jeden Knoten, XPath-Unterstützung, Möglichkeit zur Änderung des Dokuments.
  • Nachteile: benötigt viel Speicher, langsam bei großen Dateien.
  • Wann verwenden: Konfigurationsdateien, kleine Dokumente (bis zu einigen MB).


2. SAX (Simple API for XML) — ereignisgesteuerter Streaming-Parser



SAX liest XML sequentiell und generiert Ereignisse (Elementanfang, Text, Elementende). Sie verarbeiten nur die benötigten Ereignisse – das ermöglicht die Arbeit mit Dateien beliebiger Größe.



Beispiel zur Verarbeitung von XML mit SAX:



import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;

public class SaxExample extends DefaultHandler { private boolean inTitle = false;

public void startElement(String uri, String localName, String qName, Attributes attrs) { if (qName.equals("title")) inTitle = true; }

public void characters(char[] ch, int start, int length) { if (inTitle) System.out.println("Titel: " + new String(ch, start, length)); }

public void endElement(String uri, String localName, String qName) { if (qName.equals("title")) inTitle = false; }

public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse("books.xml", new SaxExample()); }}


  • Vorteile: minimaler Speicherverbrauch, hohe Geschwindigkeit.
  • Nachteile: kein Zurückkehren zum vorherigen Element möglich, schwierig, das Dokument zu ändern.
  • Wann verwenden: große XML-Dateien (Logs, Datenbank-Dumps, Berichte).


3. StAX (Streaming API for XML) — Streaming-Parser mit Cursor-Steuerung



StAX ist eine modernere Alternative zu SAX. Sie steuern das Lesen selbst, indem Sie den Cursor durch den XML-Stream bewegen. Es stehen zwei Modi zur Verfügung: Cursor API (Ereignis-Iterator) und Event API (Ereignisverarbeitung).



Beispiel mit Cursor API (XMLStreamReader):



import javax.xml.stream.*;

public class StaxExample { public static void main(String[] args) throws Exceptio

Empfehlungen