Les technologies XML Cours 3 : Les APIS XML Janvier Version 1.0 -
LES APIS POUR MANIPULER DES DOCUMENTS XML Les APIS XML : Sont des analyseurs syntaxiques (parser en anglais, parfois francisé en parseur), des librairies proposant un ensemble de composants logiciels Permettent et facilitent la lecture, la génération et le traitement de documents XML. Ces API sont implémentées sur la base de 2 modèles : Hiérarchique : DOM XML (Document Objet Model) permet la manipulation dun document XML après lavoir représenté en mémoire sous la forme dun arbre dobjets Evénementiel : SAX (Simple API for XML) permet la manipulation dun document XML au fur et à mesure de sa lecture, sans avoir à le charger en totalité en mémoire. Lextraction des données est basée sur une gestion dévénements (création dun document, dun élément...).
LES APIS POUR MANIPULER DES DOCUMENTS XML DOM est une norme du consortium w3 SAX est une spécification disponible en projet Open Source. Il existe de nombreuses implémentations de la norme DOM et de la spécification SAX Xerces Est un projet Open Source de la fondation Apache Fournit une implémentation danalyseur syntaxique XML DOM et SAX.
LES APIS POUR MANIPULER DES DOCUMENTS XML Les différentes classes des APIS XML :
LES APIS POUR MANIPULER DES DOCUMENTS XML JAXP ou Java API for XML Parsing : LAPI javax.xml.parsers permet dobtenir des instances dun analyseur syntaxique DOM ou SAX. Cest létape préliminaire à toute manipulation de document XML. Un parseur a pour rôle danalyser un document XML. Il peut en outre vérifier la validité dun document en fonction de sa DTD ou du XML-Schema associé
LES APIS POUR MANIPULER DES DOCUMENTS XML LAPI org.xml.sax Elle implémente les interfaces SAX, fournit des classes et méthodes permettant la manipulation dun 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) lorsquil rencontre les balises de début et de fin du document et déléments
LES APIS POUR MANIPULER DES DOCUMENTS XML Exemple dun lecteur SAX :
LES APIS POUR MANIPULER DES DOCUMENTS XML Exemple dun lecteur SAX (suite) : Ce premier exemple est un parseur de type SAX qui se contente de détecter les différents balises et attributs contenus dans un document XML et deffectuer un traitement associé. Pour le faire, la classe principale hérite de la classe HandlerBase ou de la classe DefaultHandler. Ces 2 classes fournissent en effet un certain nombre de méthodes capables de gérer les évènements liées à lanalyse dun document XML : startElement gère lévènement début dun élément, startDocument gère lévénement début dun document, endDocument gére lévénement fin dun document... Une fois, linstance dun parseur de type SAXParser obtenue, il faut ensuite, à laide de la méthode parse, associer la source de données XML (passée en paramètre) au flux dévènements gérés par les méthodes des classes HandlerBase ou DefaultHandler.
LES APIS POUR MANIPULER DES DOCUMENTS XML LAPI org.xml.dom : Elle implémente les interfaces DOM et fournit des classes et des méthodes permettant la manipulation dun document XML via une gestion darbre. 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 larbre afin den traiter chaque nœud.
LES APIS POUR MANIPULER DES DOCUMENTS XML Lecture dun document XML par DOM (1) import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.SAXException; import java.io.*; public class ExempleDOM { public static void main(String[] args) { public static void main(String[] args) { try{ try{ // création d'une fabrique de constructeur de documents DOM // création d'une fabrique de constructeur de documents DOM DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance(); // création d'un constructeur de documents DOM // création d'un constructeur de documents DOM DocumentBuilder constructeur = fabrique.newDocumentBuilder(); DocumentBuilder constructeur = fabrique.newDocumentBuilder();
LES APIS POUR MANIPULER DES DOCUMENTS XML Lecture dun document XML par DOM (2) // lecture du contenu d'un fichier XML avec le constructeur pour // lecture du contenu d'un fichier XML avec le constructeur pour // créer le document DOM correspondant // créer le document DOM correspondant File xmlFile = new File("ExempleDOM.xml"); File xmlFile = new File("ExempleDOM.xml"); Document document = constructeur.parse(xmlFile); Document document = constructeur.parse(xmlFile); // traitement du document // traitement du document printDocument(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"); }
LES APIS POUR MANIPULER DES DOCUMENTS XML Lecture dun document XML par DOM (3) catch(IOException ioe) { System.out.println("Erreur d'entrée/sortie"); } } public static void printNode(Node node) { 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) { public static void printDocument(Document document) { Element racine = document.getDocumentElement(); printNode(racine); }}
LES APIS POUR MANIPULER DES DOCUMENTS XML Lecture dun document XML par DOM (4) Fichier XML à lire : <bibliothèque> <titre>titre0</titre><auteur>auteur0</auteur><éditeur>éditeur0</éditeur></livre> <titre>titre1</titre><auteur>auteur1</auteur><éditeur>éditeur1</éditeur></livre></bibliothèque>
LES APIS POUR MANIPULER DES DOCUMENTS XML Lecture dun document XML par DOM (4) Résultat : [biblioth è que: null] [#text:] [livre: null] [#text:] [titre: null] [#text: titre0] [#text:] [auteur: null] [#text: auteur0] [#text:] [ é diteur: null] [#text: é diteur0] [...]
LES APIS POUR MANIPULER DES DOCUMENTS XML Exemple de générateur dXML par DOM (1)
LES APIS POUR MANIPULER DES DOCUMENTS XML Exemple de générateur dXML par DOM (2)
LES APIS POUR MANIPULER DES DOCUMENTS XML Exemple de générateur dXML par DOM (3)
LES APIS POUR MANIPULER DES DOCUMENTS XML Exemple de transformation de document XML : On dispose dun fichier source input.xml et dune fiche XSLT input.xsl, et on désire créer un fichier output.html à partir de ces deux éléments.
CONCLUSION : SAX VERSUS DOM SAX ou DOM ?