Travailler avec XML en Java : DOM, SAX, StAX et JAXB
XML (eXtensible Markup Language) reste l'un des formats clés pour le stockage et la transmission de données structurées. En Java, il existe plusieurs bibliothèques intégrées et populaires pour travailler avec XML. Dans cet article, nous allons aborder toutes les approches principales : des classiques DOM et SAX au moderne JAXB.
1. DOM (Document Object Model) — accès complet au document
Le parseur DOM charge l'intégralité du document XML en mémoire sous forme d'une structure arborescente. Cela offre un contrôle total sur le document : vous pouvez lire, modifier, supprimer et ajouter des nœuds.
Avantages de DOM :
- Accès aléatoire à n'importe quel élément du document
- Possibilité de modifier la structure XML
- Modèle objet intuitif
Inconvénients :
- Consommation mémoire élevée (tout le document en RAM)
- Traitement lent des fichiers volumineux
Exemple d'utilisation de 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) — parsing en flux
SAX est un parseur orienté événements. Il lit le XML séquentiellement et appelle des méthodes callback lorsqu'il rencontre une balise ouvrante/fermante, du texte ou des attributs. La mémoire est utilisée de manière minimale.
Quand utiliser SAX :
- Fichiers XML très volumineux (centaines de mégaoctets)
- Lecture seule, sans modification
- Ressources limitées de l'appareil
Exemple de parseur SAX :
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) — parsing en flux pratique
StAX est un compromis entre DOM et SAX. Il fonctionne également en mode flux, mais offre une interface pull plus pratique (vous demandez vous-même l'élément suivant).
Deux façons de travailler avec StAX :
- XMLStreamReader — pour la lecture
- XMLStreamWriter — pour l'écriture
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 Aussi dans la bibliothèque
Travailler avec S3 et les stockages cloud en Go : la bibliothèque minio-go
Configuration d'applications C++ : bibliothèques et outils pour un réglage flexible
Planificateur de tâches PHP : tâches de type cron sans crond
Client HTTP pour JavaScript (Node.js) : top bibliothèques 2025