Ces API sont implémentées sur la base de 2 modèles:
Elle implémente les interfaces SAX, fournit des classes et méthodes permettant la manipulation d’un document XML via une gestion d’événement.
Le parseur analyse le flot de caractères du document et appelle des méthodes de rappel (en anglais callback) lorsqu’il rencontre les balises de début et de fin du document et d’éléments
public class SimpleSaxParser {
/**
* Contructeur.
*/
public SimpleSaxParser(String uri) throws SAXException, IOException {
XMLReader saxReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
saxReader.setContentHandler(new SimpleContentHandler());
saxReader.parse(uri);
}
public static void main(String[] args) {
if (0 == args.length || 2 < args.length) {
System.out.println("Usage : SimpleSaxParser uri [parserClassName]");
System.exit(1);
}
String uri = args[0];
String parserName = null;
if (2 == args.length) {
parserName = args[1];
}
try {
SimpleSaxParser parser = new SimpleSaxParser(uri);
} catch (Throwable t) {
t.printStackTrace();
}
}
}
Elle implémente les interfaces DOM et fournit des classes et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre.
On peut ainsi ajouter ou supprimer un noeud, ajouter ou supprimer un attribut à un nœud (méthodes appendChild, setAttribute de la classe Element par exemple)...
Un parseur DOM construit un objet DOM, puis parcours en largeur et en profondeur l’arbre afin d’en traiter chaque nœud.
public class ExempleDOM {
public static void main(String[] args) {
try{
// création d'une fabrique de constructeur de documents DOM
DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
// création d'un constructeur de documents DOM
DocumentBuilder constructeur = fabrique.newDocumentBuilder();
// lecture du contenu d'un fichier XML avec le constructeur pour
// créer le document DOM correspondant
File xmlFile = new File("ExempleDOM.xml");
Document document = constructeur.parse(xmlFile);
// traitement du document
printDocument(document);
} catch(ParserConfigurationException pce) {
System.out.println("Erreur de configuration du parseur DOM");
} catch(SAXException se) {
System.out.println("Erreur lors du parsing du document");
} catch(IOException ioe) {
System.out.println("Erreur d'entrée/sortie");
}
}
public static void printNode(Node node) {
System.out.println(node);
NodeList nodes = node.getChildNodes();
for(int i=0; i<nodes.getLength(); i++) {
Node n = nodes.item(i);
printNode(n);
}
}
public static void printDocument(Document document) {
Element racine = document.getDocumentElement();
printNode(racine);
}
}
| Avantages | Inconvénients | |
|---|---|---|
| SAX | le traitement du document par le programme se fait en cours d'analyse (efficacité) // seuls les éléments pertinents sont traités | l'écriture des callback pour traiter des structures imbriquées est plus complexe |
| DOM | un einterface navigationnelle est fournit pour parcourir un arbre d'éléments | un arbre est construit en mémoire, tous les éléments sont représentés, le traitement du document par le programme se fait après l'analyse |