Arbeiten mit XML in Java: DOM, SAX, StAX und JAXB – vollständiger Leitfaden

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 integrierte und beliebte Bibliotheken für die Arbeit mit XML. In diesem Artikel werden wir alle grundlegenden Ansätze behandeln: von den klassischen DOM und SAX bis hin zum modernen JAXB.



1. DOM (Document Object Model) – vollständiger Zugriff auf das Dokument



Der DOM-Parser lädt das gesamte XML-Dokument als Baumstruktur in den Arbeitsspeicher. Dies bietet vollständige Kontrolle über das Dokument: Knoten können gelesen, geändert, gelöscht und hinzugefügt werden.



Vorteile von DOM:

  • Direkter Zugriff auf jedes Element des Dokuments
  • Möglichkeit zur Änderung der XML-Struktur
  • Intuitiv verständliches Objektmodell


Nachteile:

  • Hoher Speicherverbrauch (gesamtes Dokument im RAM)
  • Langsame Verarbeitung großer Dateien


Beispiel für die Verwendung von DOM:

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

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

NodeList bookList = document.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(title + " — " + author); } }}


2. SAX (Simple API for XML) – Streaming-Parsing



SAX ist ein ereignisgesteuerter Parser. Er liest XML sequentiell und ruft Callback-Methoden auf, wenn ein öffnender/schließender Tag, Text oder Attribute auftreten. Der Speicherverbrauch ist minimal.



Wann SAX verwendet werden sollte:

  • Sehr große XML-Dateien (mehrere hundert Megabyte)
  • Nur lesender Zugriff, ohne Änderungen
  • Begrenzte Geräteressourcen


Beispiel eines SAX-Parsers:

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

public class SaxExample { public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser();

DefaultHandler handler = new DefaultHandler() { boolean isTitle = false;

public void startElement(String uri, String localName, String qName, Attributes attributes) { if (qName.equalsIgnoreCase("title")) isTitle = true; }

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

saxParser.parse("books.xml", handler); }}


3. StAX (Streaming API for XML) – komfortables Streaming-Parsing



StAX ist ein Kompromiss zwischen DOM und SAX. Es arbeitet ebenfalls im Streaming-Modus, bietet aber eine benutzerfreundlichere Pull-Schnittstelle (Sie fordern das nächste Element selbst an).



Zwei Arbeitsweisen mit StAX:

  • XMLStreamReader – zum Lesen
  • XMLStreamWriter – zum Schreiben


import javax.xml.stream.*;import java.io.*;

public class StaxExample { public static void main(String[] args) throws Exception { XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory.createXMLStreamReade

Empfehlungen