Accueil > Forum > > > > parser un fichier xml avec JDOM
parser un fichier xml avec JDOM
dimanche 20 avril 2008 à 20:09:33 |
parser un fichier xml avec JDOM

nadjet24
|
bonjour , je souhaite avoir une aide, car je souhaite parser mon fichier xml en utilisant JDOM pour obtenir son arboressence mais j'ai des problème au niveau de mon programme .J'aurai des erreurs au niveau des declaration quant il s'agit de : en deux mots exemple tp: PartyInfos voilà mon programme: import java.io.*; import org.jdom.*; import org.jdom.output.*; public class JDOM1 { //Nous allons commencer notre arborescence en créant la racine XML //qui sera ici "personnes". static Element racine = new Element("tp:collaborationProtocolProfil"); //On crée un nouveau Document JDOM basé sur la racine que l'on vient de créer static org.jdom.Document document = new Document(racine); //Ajouter ces deux méthodes à notre class JDOM static void affiche() { try { //On utilise ici un affichage classic avec getPrettyFormat() XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, System.out); } catch (java.io.IOException e){} } static void enregistre(String fichier) { try { //On utilise ici un affichage classic avec getPrettyFormat() XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); //Remarquez qu'il suffit simplement de créer une instance de FileOutputStream //avec en argument le nom du fichier pour effectuer la sérialisation. sortie.output(document, new FileOutputStream(fichier)); } catch (java.io.IOException e){} } public static void main(String[] args) { //On crée un nouvelle Element tpPartyInfo et on l'ajoute //en temps qu'Element de racine //On crée un nouvelle Element tp:PartyId et on l'ajoute //en temps qu'Element de racine Element tpPartyInfos = new Element("tp:PartyInfos"); racine.addContent(tp:PartyInfos); //On crée un nouvelle Attribut tptype et on l'ajoute à tpPartyInfos //grâce à la méthode setAttribute Element tp:PartyId=new Element("tp:PartyId"); Attribute tptype = new Attribute("tp:type","DUNS"); tp:PartyId.setAttribute(tp:type); //On crée un nouvelle Element , on lui assigne du text //et on l'ajoute en temps qu'Element de etudiant tpPartyId.setText("lk"); tp:PartyInfos.addContent(tp:PartyId); //Les deux appels qui suivent seront définis dans la partie 2.3. affiche(); enregistre("Exercice.xml"); } } et voilà mon fichier xml <?xml version="1.0" encoding="UTF-8"?> <tp:CollaborationProtocolProfile xmlns:tp=" [ Lien ]" xmlns:xsi=" [ Lien ]" xmlns:xlink=" [ Lien ]" xmlns:ds=" [ Lien ]#" xsi:schemaLocation=" [ Lien ] [ Lien ]" tp:version="1.1"> <tp:PartyInfo> <tp:PartyId tp:type="DUNS">123456789</tp:PartyId> <tp:PartyRef tp:href="http://example.com/about.html"/> <tp:CollaborationRole tp:id="N00"> <tp:ProcessSpecification tp:version="1.0" tp:name="buySell" xlink:type="simple" xlink:href="http://www.ebxml.org/processes/buySell.xml"/> <tp:Role tp:name="buyer" xlink:type="simple" xlink:href="http://ebxml.org/processes/buySell.xml#buyer"/> <tp:CertificateRef tp:certId="N03"/> <tp:ServiceBinding tp:channelId="N04" tp:packageId="N0402"> <tp:Service tp:type="uriReference">uri:example.com/services/buyerService</tp:Service> <tp:Override tp:action="orderConfirm" tp:channelId="N07" tp:packageId="N0402" xlink:href=" [ Lien ]" xlink:type="simple"/> </tp:ServiceBinding> </tp:CollaborationRole> <tp:Certificate tp:certId="N03"> <ds:KeyInfo/> </tp:Certificate> <tp:DeliveryChannel tp:channelId="N04" tp:transportId="N05" tp:docExchangeId="N06"> <tp:Characteristics tp:syncReplyMode="none" tp:nonrepudiationOfOrigin="true" tp:nonrepudiationOfReceipt="false" tp:secureTransport="true" tp:confidentiality="true" tp:authenticated="true" tp:authorized="false"/> </tp:DeliveryChannel> <tp:DeliveryChannel tp:channelId="N07" tp:transportId="N08" tp:docExchangeId="N06"> <tp:Characteristics tp:syncReplyMode="none" tp:nonrepudiationOfOrigin="true" tp:nonrepudiationOfReceipt="false" tp:secureTransport="false" tp:confidentiality="true" tp:authenticated="true" tp:authorized="false"/> </tp:DeliveryChannel> <tp:Transport tp:transportId="N05"> <tp:SendingProtocol tp:version="1.1">HTTP</tp:SendingProtocol> <tp:ReceivingProtocol tp:version="1.1">HTTP</tp:ReceivingProtocol> <tp:Endpoint tp:uri="https://www.example.com/servlets/ebxmlhandler" tp:type="allPurpose"/> <tp:TransportSecurity> <tp:Protocol tp:version="3.0">SSL</tp:Protocol> <tp:CertificateRef tp:certId="N03"/> </tp:TransportSecurity> </tp:Transport> <tp:Transport tp:transportId="N08"> <tp:SendingProtocol tp:version="1.1">HTTP</tp:SendingProtocol> <tp:ReceivingProtocol tp:version="1.1">SMTP</tp:ReceivingProtocol> <tp:Endpoint tp:uri="mailto:ebxmlhandler@example.com" tp:type="allPurpose"/> </tp:Transport> <tp:DocExchange tp:docExchangeId="N06"> <tp:ebXMLBinding tp:version="0.98b"> <tp:ReliableMessaging tp:deliverySemantics="OnceAndOnlyOnce" tp:idempotency="true" tp:messageOrderSemantics="Guaranteed"> <tp:Retries>5</tp:Retries> <tp:RetryInterval>30</tp:RetryInterval> <tp:PersistDuration>P1D</tp:PersistDuration> </tp:ReliableMessaging> <tp:NonRepudiation> <tp:Protocol>http://www.w3.org/2000/09/xmldsig#</tp:Protocol> <tp:HashFunction>http://www.w3.org/2000/09/xmldsig#sha1</tp:HashFunction> <tp:SignatureAlgorithm>http://www.w3.org/2000/09/xmldsig#dsa-sha1</tp:SignatureAlgorithm> <tp:CertificateRef tp:certId="N03"/> </tp:NonRepudiation> <tp:DigitalEnvelope> <tp:Protocol tp:version="2.0">S/MIME</tp:Protocol> <tp:EncryptionAlgorithm>DES-CBC</tp:EncryptionAlgorithm> <tp:CertificateRef tp:certId="N03"/> </tp:DigitalEnvelope> </tp:ebXMLBinding> </tp:DocExchange> </tp:PartyInfo> <tp:Packaging tp:id="N0402"> <tp:ProcessingCapabilities tp:parse="true" tp:generate="true"/> <tp:SimplePart tp:id="N40" tp:mimetype="text/xml"> <tp:NamespaceSupported tp:location=" [ Lien ]" tp:version="0.98b">http://www.ebxml.org/namespaces/messageService</tp:NamespaceSupported> <tp:NamespaceSupported tp:location=" [ Lien ]" tp:version="1.0">http://www.w3.org/2000/09/xmldsig</tp:NamespaceSupported> </tp:SimplePart> <tp:SimplePart tp:id="N41" tp:mimetype="text/xml"> <tp:NamespaceSupported tp:location=" [ Lien ]" tp:version="1.0">http://ebxml.org/processes/buysell.xsd</tp:NamespaceSupported> </tp:SimplePart> <tp:CompositeList> <tp:Composite tp:id="N42" tp:mimetype="multipart/related" tp:mimeparameters="type=text/xml;"> <tp:Constituent tp:idref="N40"/> <tp:Constituent tp:idref="N41"/> </tp:Composite> </tp:CompositeList> </tp:Packaging> <tp:Comment tp:xml_lang="en-us">buy/sell agreement between example.com and contrived-example.com</tp:Comment> </tp:CollaborationProtocolProfile>
|
|
lundi 21 avril 2008 à 01:31:59 |
Re : parser un fichier xml avec JDOM

chimi
|
voici comment tu dois faire
pour ke ce soit plus clair telecharge la faqxml sur developpez.com
Accueil
Accueil
Le
Club Delphi
Kylix C
C++ Java
J2EE DotNET
& C# Visual
Basic Access
Pascal
Dev
Web PHP
ASP
XML
UML
SQL
SGBD Win
Linux
Autres
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.
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 et à modifier son contenu.
Version HTML/ZIP
Version PDF
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.
Sun Microsystems (Comment on the JSR-102 Approval Ballot)
In general we tend to prefer to avoid adding new APIs to the Java platform which replicate the functionality of existing APIs. However JDOM does appear to be significantly easier to use than the earlier APIs, so we believe it will be a useful addition to the platform.
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 JDOM
1.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 JDOM
2.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 :
Fichier XML
<personnes> <etudiant classe="P2"> <nom>CynO</nom> <etudiant> <personnes>
JDOM1.java
import java.io.*; import org.jdom.*; import org.jdom.output.*; public class JDOM1 { //Nous allons commencer notre arborescence en créant la racine XML //qui sera ici "personnes". static Element racine = new Element("personnes"); //On crée un nouveau Document JDOM basé sur la racine que l'on vient de créer static org.jdom.Document document = new Document(racine); public static void main(String[] args) { //On crée un nouvel Element etudiant et on l'ajoute //en temps qu'Element de racine Element etudiant = new Element("etudiant"); racine.addContent(etudiant); //On crée un nouvel Attribut classe et on l'ajoute à etudiant //grâce à la méthode setAttribute Attribute classe = new Attribute("classe","P2"); etudiant.setAttribute(classe); //On crée un nouvel Element nom, on lui assigne du texte //et on l'ajoute en temps qu'Element de etudiant Element nom = new Element("nom"); nom.setText("CynO"); etudiant.addContent(nom); //Les deux méthodes qui suivent seront définies plus loin dans l'article affiche(); enregistre("Exercice1.xml"); } }
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.
JDOM1.java
//Ajouter ces deux méthodes à notre classe JDOM1 static void affiche() { try { //On utilise ici un affichage classique avec getPrettyFormat() XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, System.out); } catch (java.io.IOException e){} } static void enregistre(String fichier) { try { //On utilise ici un affichage classique avec getPrettyFormat() XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); //Remarquez qu'il suffit simplement de créer une instance de FileOutputStream //avec en argument le nom du fichier pour effectuer la sérialisation. sortie.output(document, new FileOutputStream(fichier)); } catch (java.io.IOException e){} }
Après exécution voici le résultat obtenu (affichage sur la sortie standard et contenu du fichier "Exercice1.xml").
Exercice1.xml
<?xml version="1.0" encoding="UTF-8"?> <personnes> <etudiant classe="P2"> <nom>CynO</nom> </etudiant> </personnes>
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 XML
3.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 :
Exercice2.xml
<?xml version="1.0" encoding="UTF-8"?> <personnes> <etudiant classe="P2"> <nom>CynO</nom> <prenoms> <prenom>Nicolas</prenom> <prenom>Laurent</prenom> </prenoms> </etudiant> <etudiant classe="P1"> <nom>Superwoman</nom> </etudiant> <etudiant classe="P1"> <nom>Don Corleone</nom> </etudiant> </personnes>
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.
JDOM2.java
import java.io.*; import org.jdom.*; import org.jdom.input.*; import org.jdom.filter.*; import java.util.List; import java.util.Iterator; public class JDOM2 { static org.jdom.Document document; static Element racine; public static void main(String[] args) { //On crée une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { //On crée un nouveau document JDOM avec en argument le fichier XML //Le parsing est terminé ;) document = sxb.build(new File("Exercice2.xml")); } catch(Exception e){} //On initialise un nouvel élément racine avec l'élément racine du document. racine = document.getRootElement(); //Méthode définie dans la partie 3.2. de cet article afficheALL(); } }
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.
JDOM2.java
//Ajouter cette méthodes à la classe JDOM2 static void afficheALL() { //On crée une List contenant tous les noeuds "etudiant" de l'Element racine List listEtudiants = racine.getChildren("etudiant"); //On crée un Iterator sur notre liste Iterator i = listEtudiants.iterator(); while(i.hasNext()) { //On recrée l'Element courant à chaque tour de boucle afin de //pouvoir utiliser les méthodes propres aux Element comme : //selectionner un noeud fils, modifier du texte, etc... Element courant = (Element)i.next(); //On affiche le nom de l'element courant System.out.println(courant.getChild("nom").getText()); } }
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 :
* Un sous élément nom qui doit avoir pour valeur "CynO".
* Un sous élément prenoms qui doit posséder au moins un sous élément prenom dont la valeur est "Laurent".
Une fois le filtre créé nous pourrons récupérer une liste contenant les éléments répondant à ces critères.
JDOM2.java
//Ajouter cette méthode à la classe JDOM2 //Remplacer la ligne afficheALL(); par afficheFiltre(); static void afficheFiltre() { //On crée un nouveau filtre Filter filtre = new Filter() { //On défini les propriétés du filtre à l'aide //de la méthode matches public boolean matches(Object ob) { //1 ère vérification : on vérifie que les objets //qui seront filtrés sont bien des Elements if(!(ob instanceof Element)){return false;} //On crée alors un Element sur lequel on va faire les //vérifications suivantes. Element element = (Element)ob; //On crée deux variables qui vont nous permettre de vérifier //les conditions de nom et de prenom int verifNom = 0; int verifPrenom = 0; //2 ème vérification: on vérifie que le nom est bien "CynO" if(element.getChild("nom").getTextTrim().equals("CynO")) { verifNom = 1; } //3 ème vérification: on vérifie que CynO possède un prenom "Laurent" //On commence par vérifier que la personne possède un prenom, //en effet notre fichier XML possède des étudiants sans prénom ! Element prenoms = element.getChild("prenoms"); if(prenoms == null){return false;} //On constitue une list avec tous les prenom List listprenom = prenoms.getChildren("prenom"); //On effectue la vérification en parcourant notre liste de prenom //(voir: 3.1. Parcourir une arborescence) Iterator i = listprenom.iterator(); while(i.hasNext()) { Element courant = (Element)i.next(); if(courant.getText().equals("Laurent")) { verifPrenom = 1; } } //Si nos conditions sont remplies on retourne true, false sinon if(verifNom == 1 && verifPrenom == 1) { return true; } return false; } };//Fin du filtre //getContent va utiliser notre filtre pour créer une liste d'étudiants répondant //à nos critères. List resultat = racine.getContent(filtre); //On affiche enfin l'attribut classe de tous les éléments de notre list Iterator i = resultat.iterator(); while(i.hasNext()) { Element courant = (Element)i.next(); System.out.println(courant.getAttributeValue("classe")); } }
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 JDOM
4.1. Modifier des Elements
Nom Arguments des surcharges Description
addContent Collection, String ou Content, c'est à dire un Element ou quoi que se soit qui peut être contenu par un noeud. Ajoute le contenu de l'argument à la fin du contenu d'un Element. On peut spécifier un index pour l'inserer à la position voulu.
clone Retourne un clone parfait de l'Element.
cloneContent Comme son nom l'indique on ne copie que le contenu.
removeAttribute Attribut ou nom de l'attribut (String) Supprime un attribut d'un Element
removeChild nom du noeud enfant (String) Supprime le premier enfant portant ce nom.
removeChildren nom des noeuds enfants (String) Supprime tous les enfants ayant ce nom.
removeContent Content, Index ou Filtre Supprime l'intégralité d'un noeud donné en argument ou par sa position. removeContent accept aussi les filtres, tout comme getContent vu précédement.
setAttribute Attribut ou nom de l'attribut et sa valeur (String, String) Cette méthode permet à la fois de créer un attribut et d'en modifier sa valeur.
setContent Content Remplace le contenu d'un Element. On peut spécifier un index si l'on ne veut pas tout remplacer.
setName Nouveau nom de l'Element (String) Change le nom de l'Element.
setText Nouveau Text à inserer (String) Change le text contenu par l'Element. <element>TEXT</element>
toString Retourne une représentation de l'Element sous forme de chaine.
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.
JDOM3.java
//Créer une nouvelle class JDOM3 import java.io.*; import org.jdom.*; import org.jdom.input.*; import org.jdom.output.*; import java.util.List; import java.util.Iterator; public class JDom { static org.jdom.Document document; static Element racine; public static void main(String[] args) { try { lireFichier("Exercice 2.xml"); supprElement("prenoms"); enregistreFichier("Exercice 2.xml"); } catch(Exception e){} } //On parse le fichier et on initialise la racine de //notre arborescence static void lireFichier(String fichier) throws Exception { SAXBuilder sxb = new SAXBuilder(); document = sxb.build(new File(fichier)); racine = document.getRootElement(); } //On fait des modifications sur un Element static void supprElement(String element) { //Dans un premier temps on liste tous les étudiants List listEtudiant = racine.getChildren("etudiant"); Iterator i = listEtudiant.iterator(); //On parcours la liste grâce à un iterator while(i.hasNext()) { Element courant = (Element)i.next(); //Si l'etudiant possède l'Element en question on applique //les modifications. if(courant.getChild(element)!=null) { //On supprime l'Element en question courant.removeChild(element); //On renomme l'Element père sachant qu'une balise XML n'accepte //ni les espaces ni les caractères spéciaux //"etudiant modifié" devient "etudiant_modifie" courant.setName("etudiant_modifie"); } } } //On enregsitre notre nouvelle arborescence dans le fichier //d'origine dans un format classique. static void enregistreFichier(String fichier) throws Exception { XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, new FileOutputStream(fichier)); } }
Voici le contenu du fichier "Exemple2.xml" après exécution.
Exemple2.xml
<?xml version="1.0" encoding="UTF-8"?> <personnes> <etudiant_modifie classe="P2"> <nom>CynO</nom> </etudiant_modifie> <etudiant classe="P1"> <nom>Superwoman</nom> </etudiant> <etudiant classe="P1"> <nom>Don Corleone</nom> </etudiant> </personnes>
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.
//Pour être compilé cette fonction à besoin de l'importation suivante //qui contient la classe DOMBuilder import org.jdom.input.*; org.jdom.Document DOMtoJDOM(org.w3c.dom.Document documentDOM) throws Exception { //On utilise la classe DOMBuilder pour cette transformation DOMBuilder builder = new DOMBuilder(); org.jdom.Document documentJDOM = builder.build(documentDOM); return documentJDOM; }
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.
//Pour être compilé cette fonction à besoin de l'importation suivante //qui contient la classe DOMOutputter import org.jdom.output.*; org.w3c.dom.Document DOMtoJDOM(org.jdom.Document documentJDOM) throws Exception { //On utilise la classe DOMOutputter pour cette transformation DOMOutputter domOutputter = new DOMOutputter(); org.w3c.dom.Document documentDOM = domOutputter.output(documentJDOM); return documentDOM; }
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é.
//Pour être compilé cette fonction à besoin des importations suivantes import java.io.*; //JDOM import org.jdom.transform.*; import org.jdom.output.*; //TrAX import javax.xml.transform.*; import javax.xml.transform.stream.StreamSource; void outputXSLT(org.jdom.Document documentJDOMEntree,String fichierXSL) { //Document JDOMResult, résultat de la transformation TraX JDOMResult documentJDOMSortie = null; //Document JDOM après transformation org.jdom.Document resultat = null; try { //On définit un transformer avec la source XSL //qui va permettre la transformation TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(new StreamSource(fichierXSL)); //On transforme le document JDOMEntree grâce à notre transformer. //La méthoded transform() prend en argument le document d'entree associé au transformer //et un document JDOMResult, résultat de la transformation TraX transformer.transform(new org.jdom.transform.JDOMSource(documentJDOMEntree), documentJDOMSortie); //Pour récupérer le document JDOM issu de cette transformation //il faut utiliser la méthode getDocument() resultat = documentJDOMSortie.getDocument(); //On crée un fichier xml corespondant au résultat XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); outputter.output(resultat, new FileOutputStream("resultat.xml")); } catch(Exception e){} }
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 :
* http://www.jdom.org
* http://java.sun.com
Je tiens à remercier également les forums de developpez.com pour leur aide. Pour toute question nicolas.cynober@supinfo.com
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érets. Cette page est déposée à la SACD.
Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright 2000..2004 www.developpez.com
|
|
Cette discussion est classée dans : http, element, www, tp, ebxml
Répondre à ce message
Sujets en rapport avec ce message
utilisation de MutipartRequest [ par jmg02001 ]
Bonjour sauriez vous la quelle de ces deux class est la plus simple à utiliser et la mieux et pourquoi?http://www.geocities.com/jasonpell/programs.htm
Lire des variables depuis un fichier? [ par LitOff ]
Bonjour,J'aimerais pouvoir récupérer les valeurs des variables disponibles dans un fichier texte composé de la facon suivante:// Commentaire 1// Comme
Emploi, ma boite recrute [ par JBAware ]
Bonjour,Je travaille pour une société de service de renommée internationale (Je vous assure, je mens pas). Pour l'histoire l'entreprise est internatio
depuis un menu applet ouvrir les pages dans _blank [ par talula ]
Bonjour à tous,J'ai téléchargé un menu applet super sympa (je trouve)mais le problems est qu'il ouvre les liens sur lui même c'est à dire dans la fram
Chenille en processing (java) [ par scareface ]
Bonjour j'aurais besoin d'aide pour faire ceci en processing : http://www.bugsbusy.be/heaj/processing/Exercice_Corrige_1/Applet/index.html voila l
Supprimer element d'un Jlist simplement.... GALERE [ par Syruis ]
Bonjour, je vais poser une question conne mais je vois pas comment supprimer un element d'une Jlist simplement.. Javadoc: http://java.sun.com/j2se/1.
Afficher page Web dans appli JAVA [ par k0ntakt ]
Salut,J'ai trouver un topic traitant du sujet http://www.javafr.com/forum.v2.aspx?id=237789Je touche pas des masses en java mais voila.Mon besoin est
JAR et Serveur Web [ par GRenard ]
Bonjour,Je voudrais savoir s'il y avait un moyen de désactiver l'option que lorsqu'une classe n'existe pas dans le .jar (chargée par exemple par réfle
éditer du java ??? [ par aze555666 ]
sltune question de newbie (je ne connais rien au java):quel logiciel dois-je utiliser pour éditer un code java dans un fichier en .class ???j'ai essay
thread parallèle [ par amel2006 ]
dans mon projet je doit se connecter à des moteur de recherche et récupérer des informations tel que dans mon programme je met ces information dans un
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|