Travailler avec XML en Java : DOM, SAX, StAX et JAXB

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 façons de travailler avec XML, chacune adaptée à différentes tâches : de la lecture de petites configurations au traitement de fichiers de plusieurs gigaoctets. Dans cet article, nous aborderons quatre approches principales : DOM, SAX, StAX et JAXB.



1. DOM (Document Object Model) — chargement complet en mémoire



L'analyseur DOM charge l'intégralité du document XML en mémoire, créant une structure arborescente. C'est pratique pour la navigation et la modification, mais inefficace pour les gros fichiers.



Exemple de lecture XML avec 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("Livre : " + title + ", auteur : " + author); } }}


  • Avantages : accès pratique à n'importe quel nœud, prise en charge de XPath, possibilité de modifier le document.
  • Inconvénients : nécessite beaucoup de mémoire, lent pour les gros fichiers.
  • Quand l'utiliser : fichiers de configuration, petits documents (jusqu'à quelques Mo).


2. SAX (Simple API for XML) — analyseur de flux basé sur les événements



SAX lit le XML séquentiellement et génère des événements (début d'élément, texte, fin d'élément). Vous ne traitez que les événements nécessaires — cela permet de travailler avec des fichiers de toute taille.



Exemple de traitement XML avec 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("Titre : " + 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()); }}


  • Avantages : consommation mémoire minimale, grande vitesse.
  • Inconvénients : impossible de revenir à un élément précédent, difficile de modifier le document.
  • Quand l'utiliser : gros fichiers XML (journaux, dumps de base de données, rapports).


3. StAX (Streaming API for XML) — analyseur de flux avec contrôle par curseur



StAX est une alternative plus moderne à SAX. Vous contrôlez vous-même la lecture en déplaçant le curseur dans le flux XML. Deux modes sont disponibles : Cursor API (itérateur d'événements) et Event API (traitement des événements).



Exemple avec Cursor API (XMLStreamReader) :



import javax.xml.stream.*;

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

Recommendations