Manipuler des données XML avec Java et JDOM
Par
Nicolas CYNOBER
Vous apprendrez dans cet article à manipuler des donnés XML avec le langage Java et l'API JDOM. Introduction 1. Les origines de JDOM 1.1. Description de SAX 1.2. Description de DOM 1.3. Pourquoi JDOM ? 2. Crée un fichier XML avec JDOM 2.1. Téléchargement et installation l'API JDOM 2.2. Créer une arborescence simple 2.3. Afficher et enregistrer son fichier XML 3. Parcourir un fichier XML 3.1. Parser un fichier XML 3.2. Parcourir une arborescence 3.3. Filtrer les éléments 4. Modifier une arborescence JDOM 4.1. Modifier des Elements 4.2. Passer de DOM à JDOM et l'inverse 4.3. JDOM et XSLT Conclusion Introduction
JDOM est une API du langage Java développée indépendamment de Sun Microsystems.
Elle permet de manipuler des donnés XML plus simplement qu'avec les API classiques.
Son utilisation est pratique pour tout développeur Java et repose sur les API XML de Sun.
Vous pouvez télécharger les binaires ici. La documentation officielle (javadoc) est disponible ici. Au 23/02/2004 JDOM est disponible en version 1.0 Beta 10 et est compatible avec les versions 1.1 et supérieures du JDK.
Objectif de cet article Vous apprendrez dans cet article à manipuler des donnés XML avec le langage Java et l'API JDOM. Nous étudierons les possibilités de cette API grâce à des exemples simples. Nous apprendrons ainsi à créer un simple fichier XML, à parcourir son arborescence, à modifier son contenu. 1. Les origines de JDOM1.1. Description de SAX
SAX est l'acronyme de Simple API for XML. Ce type de parseur utilise des événements pour piloter le traitement d'un fichier XML. Un objet (nommé handler en anglais) doit implémenter des méthodes particulières définies dans une interface de l'API pour fournir les traitements à réaliser : selon les événements, le parseur appelle ces méthodes. Pour en savoir plus sur SAX, visitez le site officiel.
JDOM utilise des collections SAX pour parser les fichiers XML.
1.2. Description de DOM
DOM est l'acronyme de Document Object Model. C'est une spécification du W3C pour proposer une API qui permet de modéliser, de parcourir et de manipuler un document XML. Le principal rôle de DOM est de fournir une représentation mémoire d'un document XML sous la forme d'un arbre d'objets et d'en permettre la manipulation (parcours, recherche et mise à jour). A partir de cette représentation (le modèle), DOM propose de parcourir le document mais aussi de pouvoir le modifier. Ce dernier aspect est l'un des aspect les plus intéressant de DOM. DOM est défini pour être indépendant du langage dans lequel il sera implémenté. DOM n'est qu'une spécification qui, pour être utilisée, doit être implémentée par un éditeur tiers. DOM n'est donc pas spécifique à Java. Le parseur DOM pour JAVA le plus répandu est Xerces que vous pouvez trouver ici.
JDOM utilise DOM pour manipuler les éléments d'un Document Object Model spécifique (créé grâce à un constructeur basé sur SAX). JDOM permet donc de construire des documents, de naviguer dans leur structure, s'ajouter, de modifier, ou de supprimer leur contenu. 1.3. Pourquoi JDOM ?
Une question logique que l'on peut se poser à ce stade de l'article : Mais qu'est-ce que JDOM nous apporte de plus ? La simplicité ! Il est en vérité très laborieux de développer des applications complexes autour de XML avec DOM, qui rappelons le, n'a pas été développé spécifiquement pour Java. Voyons maintenant toutes les possibilités de JDOM à travers des exemples simples. 2. Crée un fichier XML avec JDOM2.1. Téléchargement et installation l'API JDOM
Il vous faut dans un premier temps télécharger la dernière version de JDOM disponible à cette adresse : http://www.jdom.org/dist/binary/.
Il suffit ensuite de rendre accessible le fichier /build/jdom.jar, en le placant dans votre classpath.
2.2. Créer une arborescence simple
La création d'un fichier XML en partant de zéro est des plus simple. Il suffit de construire chaque élément puis de les ajouter les uns aux autres de façon logique. Un noeud est une instance de org.jdom.Element. Nous commençons donc par créer une classe JDOM1 qui va se charger de créer l'arborescence suivante :
2.3. Afficher et enregistrer son fichier XML
Nous allons afficher puis enregistrer notre arborescence. Nous allons utiliser une unique classe pour ces deux flux de sortie : org.jdom.output.XMLOutputter, qui prends en argument un org.jdom.output.Format. En plus des trois formats par défaut (PrettyFormat, CompactFormat et RawFormat), la classe Format contient une panoplie de méthodes pour affiner votre sérialisation. Vous pouvez trouver une description de ces méthodes dans la javadoc.
Après exécution voici le résultat obtenu (affichage sur la sortie standard et contenu du fichier "Exercice1.xml").
Nous verrons dans la troisième partie comment travailler sur un document existant, parcourir son arborescence et filtrer ses éléments.
3. Parcourir un fichier XML3.1. Parser un fichier XML
Parser un fichier XML revient à transformer un fichier XML en une arborescence JDOM. Nous utiliserons pour cela le constructeur SAXBuilder, basé, comme son nom l'indique, sur l'API SAX.
Créez tout d'abord le fichier suivant dans le répertoire contenant votre future classe JDOM2 :
Notre objectif ici est d'afficher dans un premier temps le nom de tous les élèves. Nous allons créer pour cela une nouvelle classe: JDOM2.
3.2. Parcourir une arborescence
Nous utiliserons dans cette méthode deux classes apartenant au framework Collection (package java.util) : java.util.List java.util.Iterator Nous allons créer une liste basée sur les noeuds étudiants de notre arborescence puis nous allons la parcourir grâce à un iterator.
A l'exécution vous devriez voir s'afficher CynO, Superwoman et Don Corleone.
3.3. Filtrer les éléments
Notre nouvel objectif est d'afficher la classe des étudiants dont le prénom est Laurent et le nom est CynO.
Les seuls filtres que nous ayons fait pour le moment étaient directement implementés dans les méthodes que nous utilisions. List listEtudiants = racine.getChildren("etudiant") nous a permis de filtrer les sous éléments de racine selon leur nom. Vous aurez remarqué que de toute façon nous n'avions que des etudiants, le problème ne se posait donc pas ;) Les filtres permettent des sélections d'éléments selon plusieurs critères. Nous allons donc créer un filtre qui permettra de ne prendre en compte que les Elements qui possèdent :
Une fois le filtre créé nous pourrons récupérer une liste contenant les éléments répondant à ces critères.
A l'exécution vous devriez voir s'afficher P2 à votre écran.
La puissance de cet outil réside dans sa capacité à être utilisé à tout moment par n'importe quel Element de votre arborescence. Dans notre exemple, nous nous sommes servi de notre filtre JDOM comme d'un moteur de recherche. Et il est tout à fait envisageable de créer des filtres dynamiques selon vos besoins. Pour en savoir plus sur la classe Filter je vous invite à vous rendre ici. 4. Modifier une arborescence JDOM4.1. Modifier des Elements
Pour plus de détails, je vous invite à lire la documentation de la classe Element. Maintenant voyons un petit exemple de modification d'arborescence. Il vous paraîtra simpliste à coté de ce que nous avons fait jusqu'a présent mais c'est justement le but: Je tiens à vous montrer que JDOM c'est la simplicité avant tout ! Nous allons modifier le contenu de notre fichier Exemple2.xml en supprimant tous les Element prenoms de notre arborescence.
Voici le contenu du fichier "Exemple2.xml" après exécution.
4.2. Passer de DOM à JDOM et l'inverse
Il vous arrivera parfois de devoir travailler sur un document DOM. Nous allons voir comment transformer un document DOM en un document JDOM et vis versa. Voici une petite méthode qui reçoit en argument un document DOM et retourne un document JDOM.
Et maintenant, voici la fonction inverse qui reçoit en argument un document JDOM et qui retourne un document DOM. Vous remarquerez la similitude avec la fonction précédente.
4.3. JDOM et XSLT
Grâce à l'API JAXP et TraX il est très facile de faire des transformation XSLT sur un document JDOM. Dans l'exemple suivant nous allons créer une méthode qui prend en entrée un document JDOM et le nom d'un fichier XSL et qui crée en sortie un fichier XML transformé.
Conclusion
Vous vous êtes maintenant rendu compte de l'utilité de JDOM dans le traitement de données XML avec Java. Cependant cette API est encore toute jeune et en voie d'amélioration.
Pour en apprendre plus sur JDOM et rester informé je vous conseille les sites suivants :
Je tiens à remercier également les forums de developpez.com pour leur aide.
|
Copyright © 2005 Nicolas CYNOBER. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.