Lire les fichiers XML en Java
API JAXP
JAXP est une API standard de Java qui fournit une interface indépendante du fournisseur pour analyser les documents XML. Elle comprend deux principales API d’analyse : SAX (Simple API for XML) et DOM (Document Object Model).
Analyseur SAX
SAX est un analyseur basé sur des événements qui lit le document XML séquentiellement et génère des événements lorsqu’il rencontre des balises ou du contenu. Voici un exemple de lecture d’un fichier XML avec SAX :
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Main {
public static void main(String[] args) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("Début de l'élément : " + qName);
}
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("Fin de l'élément : " + qName);
}
public void characters(char ch[], int start, int length) throws SAXException {
System.out.println("Contenu : " + new String(ch, start, length));
}
};
saxParser.parse("monFichier.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Dans cet exemple, nous créons un SAXParser et définissons un DefaultHandler qui imprime le nom et le contenu de chaque élément lorsqu’il rencontre le début ou la fin d’un élément.
Analyseur DOM
DOM est un analyseur basé sur l’arbre qui charge tout le document XML en mémoire et construit une structure d’arbre hiérarchique pour représenter les éléments et les attributs du document. Voici un exemple de lecture d’un fichier XML avec DOM :
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
public class Main {
public static void main(String[] args) {
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse("monFichier.xml");
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("nomDeLElement");
for (int i = 0; i < nList.getLength(); i++) {
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Contenu : " + eElement.getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Dans cet exemple, nous créons un DocumentBuilder et utilisons la méthode parse() pour lire le fichier XML et créer une structure d’arbre DOM. Ensuite, nous utilisons la méthode getElementsByTagName() pour obtenir une liste de tous les éléments avec un certain nom de balise, et nous imprimons leur contenu.
Ce qu'il faut retenir
La lecture de fichiers XML est une tâche courante en Java. Avec les API JAXP fournies par Java, vous pouvez facilement lire des fichiers XML en utilisant soit l’analyseur SAX basé sur des événements, soit l’analyseur DOM basé sur l’arbre.