SAX Parser: Comment lire un fichier XML en Java

Sax parser est le parseur le plus populaire dernière DOM, contrairement à DOM, Sax fonctionne différemment, il ne charge pas le XML en mémoire avant qu'il le traite et ne crée aucun type d'objet de XML. SAX est un bon choix pour analyser un fichier xml d'une taille large parce qu'il consomme moins de mémoire.

SAX Parser utilise trois méthodes pour parser et lire un fichier xml:

startElement(): à chaque fois que SAX parser rencontre une balise ouvrante '<', il fait appel à startElement().

endElement(): à chaque fois que SAX parser rencontre une balise fermante '>', il fait appel à startElement().

characters(): cette méthode est appelée lorsque le SAX parser trouve un texte entre la balise ouvrante et fermante

Ces trois méthodes sont responsables de l'analyse de xml, le programmeur les utilise pour parser, lire ou extraire des informations du code.

Extraire le texte du Fichier xml en java

Pour tester le code java, il faut créer un simple fichier xml que l'on va utiliser pour afficher son contenu dans la console:

<?xml version="1.0" encoding="UTF-8"?>
<contacts>
<personne id="1">
<nom>codeur</firstname>
<prénom>java</lastname>
<mobile>054124587</phone>
<email>codeurjava@gmail.com</email>
</personne>
<personne id="2">
<nom>codeur</firstname>
<prénom>c++</lastname>
<mobile>062148795</phone>
<email>codeurcplusplus@gmail.com</email>
</personne>
</contacts>
Le code java:

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 LireFichierXML{

public static void main(String argv[]) {

try {
//Obtenir la configuration du sax parser
SAXParserFactory spfactory = SAXParserFactory.newInstance();
//Obtenir une instance de l'objet parser
SAXParser saxParser = spfactory.newSAXParser();

/*les trois méthodes sont déclarées dans le
corp du DefaltHandler*/
DefaultHandler handler = new DefaultHandler() {

boolean bnom = false;
boolean bprenom = false;
boolean bmobile = false;
boolean bemail = false;

/*cette méthode est invoquée à chaque fois que parser rencontre
une balise ouvrante '<' */
public void startElement(String uri, String localName,
String qName,Attributes attributes) throws SAXException{

if (qName.equalsIgnoreCase("nom")) {
bnom = true;
}

if (qName.equalsIgnoreCase("prenom")) {
bprenom = true;
}

if (qName.equalsIgnoreCase("mobile")) {
bmobile = true;
}

if (qName.equalsIgnoreCase("email")) {
bemail = true;
}
}

/*cette méthode est invoquée à chaque fois que parser rencontre
une balise fermante '>' */
public void endElement(String uri, String localName,
String qName) throws SAXException {

if (qName.equalsIgnoreCase("nom")) {
bnom = false;
}

if (qName.equalsIgnoreCase("prenom")) {
bprenom = false;
}

if (qName.equalsIgnoreCase("mobile")) {
bmobile = false;
}

if (qName.equalsIgnoreCase("email")) {
bemail = false;
}
}

/*imprime les données stockées entre '<' et '>' */
public void characters(char ch[], int start,
int length) throws SAXException {

if (bnom) {
System.out.println("Nom : " +
new String(ch, start, length));
bnom = false;
}

if (bprenom) {
System.out.println("Prénom : " +
new String(ch, start, length));
bprenom = false;
}

if (bmobile) {
System.out.println("Mobile : " +
new String(ch, start, length));
bmobile = false;
}

if (bemail) {
System.out.println("Email : " +
new String(ch, start, length));
bemail = false;
}
}

};

saxParser.parse("exemple.xml", handler);

} catch (Exception e) {
e.printStackTrace();
}
}
}
Exécution:

Nom : codeur
Prénom : java
Mobile : 054124587
Email : codeurjava@gmail.com

Nom : codeur
Prénom : c++
Mobile : 062148795
Email : codeurcplusplus@gmail.com