Académique Documents
Professionnel Documents
Culture Documents
Cette faq a t ralise partir des questions frquemment poses sur les forums de http://www.developpez.com et de l'exprience personnelle des auteurs. Nous tenons souligner que cette faq ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette faq ne prtend pas non plus tre complte. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rdacteur, lisez Comment participer cette faq ?. Sur ce, nous vous souhaitons une bonne lecture. L'quipe Java
bazinou - iubito - Clment Cunin - Johann Heymes - Ronan Le Gallo - Christophe Ludet - Jean-Baptiste Bugeaud - Grgory Danelon - Sbastien Meric - Romain Guy Pierre-Yves Varoux - Ioan Calapodescu - bahamouth - duj - braim - bulbo - Ricky81 - L'quipe Java - Debernad jcarre - Seigne David - cyberzoide - xavlours - christopheJ - willowII - Nourdine Falola - laffreuxthomas - adiGuba
1. 2. 3. 4. 5. 6.
Informations gnrales (5) ..................................................................................................................................... 4 Gnralits (11) ...................................................................................................................................................... 7 SAX (6) .................................................................................................................................................................13 DOM (11) ..............................................................................................................................................................20 XSLT (9) ............................................................................................................................................................... 30 XPath (12) ............................................................................................................................................................ 38
-3Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
-4Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Malgr nos efforts, des fautes d'orthographe ou de grammaire peuvent subsister. Merci de contacter les administrateurs si vous en dbusquez une... Idem pour les liens errons. lien : Quels sont les droits de reproduction de cette FAQ ?
Remerciements
Auteur : L'quipe Java Un grand merci tous ceux qui ont pris de leur temps pour la ralisation de cette FAQ. Aux rdacteurs : Remerciements tout d'abord tous ceux qui ont rdig les questions et les rponses. Clment Cunin, Johann Heymes, Nicolas Cuny, Ronan Le Gallo, Christophe Ludet, Jean-Baptiste Bugeaud, Sebastien Andreo, Grgory Danelon, Sbastien Meric, Romain Guy, Pierre-Yves Varoux, Ioan, bahamouth,
-5Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
duj, Braim, bulbo, Ricky81, Debernad, jcarre, David Seigne, xavlours, christopheJ, willowII, Nourdine Falola, laffreuxthomas. Aux correcteurs : Remerciements galement aux personnes qui ont relu les textes pour supprimer un maximum de fautes de franais. Nicolas Cuny, Jonathan Muller, Etienne Bar, Bestiol, Ukyuu. Aux visiteurs : Remerciements enfin tous ceux qui ont consult cette FAQ, et qui, par leurs remarques, nous ont aid la perfectionner. Et pour finir, un merci tout spcial Clment Cunin, qui est l'origine de cette FAQ, cyberzoide pour notre logo et ses conseils aviss et tous les membres de l'quipe qui nous ont fourni outils et logiciels ncessaires pour la ralisation de ce document.
-6Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Les questions de cette partie de la FAQ portent uniquement sur la manipulation de XML avec la technologie Java. Pour des informations plus spcifiques sur le standard XML, en lui mme, regardez : Ou trouver plus d'informations sur le format XML ? L'API Java standard pour la manipulation du format XML est JAXP (Java API for XML Processing). Cette API permet la lecture, la transformation et l'criture de fichiers ou flux XML. C'est cette API que nous allons tudier dans la partie XML de cette FAQ. JAXP n'est pas la seule API disponible pour travailler avec XML. Pour plus d'informations sur les autres API disponibles regardez : Quelles autres API existent pour travailler avec XML ?. lien : Qu'est-ce que JAXP ? lien : Ou trouver plus d'informations sur le format XML ? lien : Quelles autres API existent pour travailler avec XML ?
-7Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Pour savoir ce que sont SAX, DOM, XSLT et savoir quand et comment les utiliser regardez : Que sont les API SAX, DOM et XSLT ?. lien : Que sont les API SAX, DOM et XSLT ?
lien : Comment fonctionne l'API SAX ? lien : Comment ouvrir un fichier XML avec DOM ?
-8Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Pour des dtails sur les autres versions de JAXP, vous pouvez regarder les liens ci-dessous. lien : Quels sont les rapports entre les versions de JAXP et celles des spcifications XML ? lien : Quels sont les parseurs XML et processeurs XSLT utiliss par JAXP RI ?
Quels sont les rapports entre les versions de JAXP et celles des spcifications XML ?
Auteur : Ioan Calapodescu Voici les diffrentes versions des spcifications XML supportes par JAXP RI (Reference Implementation) 1.2 et 1.3. Versions XML JAXP RI 1.3 1.1/1.0 (prsent dans le JDK 1.5) JAXP RI 1.2 1.0 (prsent dans le JDK 1.4) SAX SAX 2.0.2 SAX 2.0.0 DOM DOM 3.0 DOM 2.0 XSLT XSLT 1.0 XSLT 1.0 XPath XPath 1.0 -/-
Pour les anciennes versions de JAXP, vous pouvez trouver de plus amples informations partir du site de sun : http://java.sun.com/xml/jaxp/index.jsp Pour connatre les versions des parseurs et processeurs utiliss par JAXP RI, regardez : Quels sont les parseurs XML et processeurs XSLT utiliss par JAXP RI ? lien : Quels sont les parseurs XML et processeurs XSLT utiliss par JAXP RI ?
Je n'ai pas le dernier JDK. Comment faire pour avoir accs toutes les fonctionnalits de JAXP ?
Auteur : Ioan Calapodescu Si vous n'avez pas le dernier JDK et que vous dsirez profiter de toutes les fonctionnalits de JAXP, vous pouvez tlcharger l'API sparment sur Java.NET. JAXP Reference Implementation Project : https:// jaxp.dev.java.net/ N'oubliez pas que vous pouvez aussi tlcharger d'autres API pour travailler avec XML. Certaines sont plus faciles, performantes ou compltes que JAXP.
Quels sont les parseurs XML et processeurs XSLT utiliss par JAXP RI ?
Auteur : Ioan Calapodescu Voici les diffrents parseurs XML et processeurs XSLT utiliss par JAXP RI (Reference Implementation) versions 1.3 , 1.2 et 1.1.
-9Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Processeur XSLT XSLTC (bas sur Xalan 2.6.0) XSLTC (bas sur Xalan 2.4.1) XSLTC
Vous pouvez changer ces outils, s'ils ne vous conviennent pas. Pour cela, vous pouvez regarder les liens ci-dessous. lien : Comment changer le parseur XML ou le processeur XSLT ?
Vous pouvez aussi faire ces modifications en ligne de commande. Par exemple : Ligne de commande
java -Djavax.xml.parsers.XXXFactory=nom.complet.de.l.implementation ...
Pour le processeur XSLT la dmarche est la mme, il suffit d'indiquer au systme quelle implmentation du processeur XSLT il doit utiliser. Naturellement, vous pouvez utiliser directement les implmentations (sans passer par les factory), mais cela vous fait perdre la "portabilit" de votre code. En effet, en cas de changement de parseur ou processeur, vous devrez changer de nombreuses parties de votre code. Le plus simple reste de spcifier l'implmentation utiliser grce aux proprits systme.
- 10 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Ainsi, lors des tests, il sera aussi possible de placer le fichier "MaDtd.dtd" dans le rpertoire ou l'application sera lance. Pour SAX: Dans le DefaultHandler redfinir la mthode resolveEntity comme suit :
public InputSource resolveEntity(String publicId, String systemId) throws SAXException { try { if (!systemId.startsWith("file:")) { return null; } String pathDtd = systemId.substring(5); if (!pathDtd.startsWith("/")) { pathDtd = "/" + pathDtd; } InputStream is = getClass().getResourceAsStream(pathDtd); if (null == is) { return null; } return new InputSource(is); } catch (Exception e) { return null; }
Lorsque cette mthode retourne null, le parser XML utilise sa mthode de recherche par dfaut pour trouver la DTD. Ce qui fait que ce code n'empche pas de trouver une DTD situe ailleurs du moment que l'URL est correcte. Pour dire au parser SAX d'utiliser cette methode resolveEntity:
SAXParser parser =... parser.getXMLReader().setEntityResolver(monHandler);
Pour DOM: Pour DOM il faut qu'une classe implmente l'interface EntityResolver. Le code de la mthode resolveEntity est exactement le mme que pour SAX. Pour spcifier au parser DOM quelle mthode utiliser:
DocumentBuilder builder = ...
- 11 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
builder.setEntityResolver(new MonEntityResolver());
Pour l'utilisation des quatre dernires API, vous pouvez regarder le J2EE 1.4 Tutorial de Sun.
- 12 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Source image : J2EE 1.4 Tutorial Pour commencer, l'application rcupre un parseur (javax.xml.parsers.SAXParser) partir d'une fabrique de parseurs (javax.xml.parsers.SAXParserFactory). Ce parseur parcourt le document XML grce un lecteur (org.xml.sax.XMLReader). Ce dernier contient plusieurs gestionnaires (ou handlers). Ce sont ces diffrents gestionnaires qui sont chargs du traitement des "vnements" lors du parsing. Voici les quatre principaux types de handlers (interfaces du package org.xml.sax) : Gestionnaire de Contenu : Le ContentHandler est charg des vnements comme le dbut ou la fin du document, l'ouverture ou a fermeture de balises ou encore la lecture de caractres. Gestionnaire d'Erreurs : Le ErrorHandler va traiter les trois types d'erreurs possibles lors du parsing : les erreurs simples, les erreurs fatales et les warnings. Gestionnaire de DTD : Le DTDHandler (Document Type Definition) gre les vnements relatifs aux DTD.
- 13 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Gestionnaire d'entits externes : L'EntityResolver est charg de grer les entits externes, en fournissant une InputSource adquate.
public class ExempleSAX { public static void main(String[] args){ try{ // cration d'une fabrique de parseurs SAX SAXParserFactory fabrique = SAXParserFactory.newInstance(); // cration d'un parseur SAX SAXParser parseur = fabrique.newSAXParser(); // lecture d'un fichier XML avec un DefaultHandler File fichier = new File("./ExempleSAX.xml"); DefaultHandler gestionnaire = new DefaultHandler(); parseur.parse(fichier, gestionnaire); }catch(ParserConfigurationException pce){ System.out.println("Erreur de configuration du parseur"); System.out.println("Lors de l'appel newSAXParser()"); }catch(SAXException se){ System.out.println("Erreur de parsing"); System.out.println("Lors de l'appel parse()"); }catch(IOException ioe){ System.out.println("Erreur d'entre/sortie"); System.out.println("Lors de l'appel parse()"); }
- 14 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Ce code ne fait "rien", dans le sens que vous n'aurez aucun effet visible lors de son excution. Cet exemple met juste en vidence l'obtention du parseur et les types d'exception susceptibles d'tre leves. Pour un exemple d'implmentation de DefaultHandler regardez : Comment parser un XML avec SAX ?. Voici quelques proprits du parseur (SAXParser) que vous pouvez spcifier la fabrique (SAXParserFactory) : setValidating(boolean) : indique si les parseurs produits par la fabrique doivent valider la DTD. Par dfaut, cette valeur est false. setSchema(Schema) : indique que les parseurs produits par la fabrique doivent valider le document XML selon un schma XML W3C. setFeature(String, boolean) : permet d'indiquer une proprit particulire pour les parseurs produits par la fabrique. Pour une liste de ces proprits, regardez le lien ci-dessous. setNamespaceAware(boolean) : indique si les parseurs, produits par la fabrique, supportent les espaces de nommage XML.
Pour finir, vous pouvez configurer encore plus profondment votre parseur avec la mthode setProperty(String, Object) de la classe SAXParser. Pour une liste des features et properties, vous pouvez regarder la description du package org.xml.sax. Pour un exemple simple (affichage sur la sortie standard du XML) tlchargez le fichier ci-dessous. Pour un exemple plus complet, regardez : Comment parser un XML avec SAX ?. lien : Comment parser un XML avec SAX ? ExempleSAX.zip
Voici un simple JavaBean Personne nous permettant de reprsenter une entre dans cet annuaire : Personne
public class Personne{ private int id; private String nom, prenom, adresse;
- 15 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Personne
public Personne(){} public public public public public public public public int getId(){return id;} String getNom(){return nom;} String getPrenom(){return prenom;} String getAdresse(){return adresse;} void void void void setId(int id){this.id = id;} setNom(String nom){this.nom = nom;} setPrenom(String prenom){this.prenom = prenom;} setAdresse(String adresse){this.adresse = adresse;}
public String toString(){ return new StringBuffer("Nom : ").append(nom).append(", ") .append("Prenom : ").append(prenom).append(", ") .append("Adresse : ").append(adresse) .toString(); }
Finalement, voici le DefaultHandler nous permettant le parsing du XML. Le parsing va simplement rcuprer une List de Personne. PersonneHandler
public class PersonneHandler extends DefaultHandler{ //rsultats de notre parsing private List<Personne> annuaire; private Personne personne; //flags nous indiquant la position du parseur private boolean inAnnuaire, inPersonne, inNom, inPrenom, inAdresse; //buffer nous permettant de rcuprer les donnes private StringBuffer buffer; // simple constructeur public PersonneHandler(){ super(); } //dtection d'ouverture de balise public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{ if(qName.equals("annuaire")){ annuaire = new LinkedList<Personne>(); inAnnuaire = true; }else if(qName.equals("personne")){ personne = new Personne(); try{ int id = Integer.parseInt(attributes.getValue("id")); personne.setId(id); }catch(Exception e){ //erreur, le contenu de id n'est pas un entier throw new SAXException(e); } inPersonne = true; }else { buffer = new StringBuffer(); if(qName.equals("nom")){ inNom = true; }else if(qName.equals("prenom")){ inPrenom = true; }else if(qName.equals("adresse")){ inAdresse = true; }else{ //erreur, on peut lever une exception
- 16 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
PersonneHandler
}
} } //dtection fin de balise public void endElement(String uri, String localName, String qName) throws SAXException{ if(qName.equals("annuaire")){ inAnnuaire = false; }else if(qName.equals("personne")){ annuaire.add(personne); personne = null; inPersonne = false; }else if(qName.equals("nom")){ personne.setNom(buffer.toString()); buffer = null; inNom = false; }else if(qName.equals("prenom")){ personne.setPrenom(buffer.toString()); buffer = null; inPrenom = false; }else if(qName.equals("adresse")){ personne.setAdresse(buffer.toString()); buffer = null; inAdresse = false; }else{ //erreur, on peut lever une exception throw new SAXException("Balise "+qName+" inconnue."); } } //dtection de caractres public void characters(char[] ch,int start, int length) throws SAXException{ String lecture = new String(ch,start,length); if(buffer != null) buffer.append(lecture); } //dbut du parsing public void startDocument() throws SAXException { System.out.println("Dbut du parsing"); } //fin du parsing public void endDocument() throws SAXException { System.out.println("Fin du parsing"); System.out.println("Resultats du parsing"); for(Personne p : annuaire){ System.out.println(p); } }
- 17 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Il existe des API plus avances que SAX pour lier des fichiers XML et des Object Java. L'exemple ci-dessus sert juste de dmonstration. PersonneHandler.zip
Par contre, au niveau du parseur SAX, il existe trois niveaux d'erreurs. Ces trois niveaux d'erreurs sont reprsentes au niveau du Gestionnaire d'Erreurs (ErrorHandler) : Erreur fatale (fatalError(SAXParseException exception) throws SAXException) : Cette erreur ne peut tre rcupre. C'est le cas par exemple pour un document mal form. Aprs ce type d'erreur, le parseur SAX arrte son travail. Erreur (error(SAXParseException exception) throws SAXException) : Cette erreur peut tre rcupre, c'est dire que le parseur SAX peut continuer traiter le reste du document XML. Ce genre d'erreur peut se produire lors d'une violation d'une contrainte impose par la DTD ou le schma. Warning (warning(SAXParseException exception) throws SAXException) : C'est un simple avertissement. Aprs cel, le parseur SAX continue le parsing du document.
Pour plus d'information sur ces erreurs, vous pouvez regarder XML 1.0 W3C Recommendation. Par dfaut (cf. DefautHandler), seules les erreurs fatales sont "traites". Voici un exemple d'implmentation de ErrorHandler. Cet exemple dtaille sur la sortie standard les erreurs simples et warnings et lve une SAXException pour les erreurs fatales :
protected String message(SAXParseException e){ String message = "Message : "+e.getMessage()+"\n"; message += "Ligne "+e.getLineNumber()+", colonne "+e.getColumnNumber()+"\n"; message += "Public id : "+e.getPublicId()+"\n"; message += "System id : "+e.getSystemId(); return message; } protected void printSAXException(SAXParseException e){ System.out.println(message(e)); if(e.getException() != null){ e.getException().printStackTrace(); } } public void warning(SAXParseException exception) throws SAXException{ System.out.println("*** Warning ***"); printSAXException(exception); } public void error(SAXParseException exception) throws SAXException{ System.out.println("*** Erreur ***"); printSAXException(exception); } public void fatalError(SAXParseException exception) throws SAXException{
- 18 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
String message = "*** Erreur fatale ***\n"; message += message(exception); SAXException se = new SAXException(message, exception); throw se;
- 19 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Source image : J2EE 1.4 Tutorial Pour commencer, l'application rcupre (javax.xml.parsers.DocumentBuilder) partir (javax.xml.parsers.DocumentBuilderFactory). un d'une constructeur fabrique de de documents constructeurs
C'est ce constructeur de documents qui va construire le DOM ou document (org.w3c.Document) partir de la source XML. Le Document est la reprsentation, sous forme d'arbre "d'objets", des donnes contenues dans le XML. DOM reste une API de "bas niveau". Si vous voulez travailler de manire plus oriente objet, avec des arbres XML, regardez du ct de jdom et dom4j (cf. Quelles autres API existent pour travailler avec XML ?). Pour un exemple pratique d'utilisation, regardez : Comment ouvrir un fichier XML avec DOM ? . lien : Comment ouvrir un fichier XML avec DOM ? lien : Quelles autres API existent pour travailler avec XML ?
- 20 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
public class ExempleDOM{ public static void main(String[] args){ try{ // cration d'une fabrique de documents DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance(); // cration d'un constructeur de documents DocumentBuilder constructeur = fabrique.newDocumentBuilder(); // lecture du contenu d'un fichier XML avec DOM File xml = new File("ExempleDOM.xml"); Document document = constructeur.parse(xml); //traitement du document //voir ExempleDOM.zip }catch(ParserConfigurationException pce){ System.out.println("Erreur de configuration du parseur DOM"); System.out.println("lors de l'appel fabrique.newDocumentBuilder();"); }catch(SAXException se){ System.out.println("Erreur lors du parsing du document"); System.out.println("lors de l'appel construteur.parse(xml)"); }catch(IOException ioe){ System.out.println("Erreur d'entre/sortie"); System.out.println("lors de l'appel construteur.parse(xml)"); }
La configuration de la fabrique est quasiment identique celle d'une fabrique de parseur SAX. Regardez : Comment crer un parseur avec SAX ?. Pour voir comment parcourir votre document, regardez : Comment parcourir l'arborescence d'un DOM ? Vous pouvez tlcharger un exemple simple (affichage sur la sortie standard du DOM) ci-dessous. lien : Comment parcourir l'arborescence d'un DOM ? ExempleDOM.zip
} protected void printSAXException(SAXParseException e){ System.out.println(message(e)); if(e.getException() != null){ e.getException().printStackTrace(); } } public void warning(SAXParseException exception) throws SAXException{ System.out.println("*** Warning ***"); printSAXException(exception); } public void error(SAXParseException exception) throws SAXException{ System.out.println("*** Erreur ***"); printSAXException(exception); } public void fatalError(SAXParseException exception) throws SAXException{ String message = "*** Erreur fatale ***\n"; message += message(exception); SAXException se = new SAXException(message, exception); throw se; }
Exemple d'utilisation :
// cration d'une fabrique de documents DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance(); // cration et configuration du constructeur de documents DocumentBuilder constructeur = fabrique.newDocumentBuilder(); constructeurs.setErrorHandler(new GestionnaireDErreurs()); Document document = constructeur.parse(new File("ExempleDOM.xml"));
- 22 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
boolean standalone = document.getXmlStandalone(); System.out.println("XML standalone = "+standalone); boolean strictError = document.getStrictErrorChecking(); System.out.println("Strict error checking = "+strictError+"\n"); System.out.println("DOCTYPE"); printDoctype(document.getDoctype()); System.out.println("CONFIGURATION"); printDOMConfiguration(document.getDomConfig());
Pour le dtail des mthodes printDoctype et printDOMConfiguration, tlchargez le fichier ci-dessous. InfosDOM.zip
Voici les diffrents types de nodes et le rsultat des mthodes capables d'en dcouvrir le contenu.
- 23 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Interface getNodeType() getNodeName() (org.w3c.dom) (short) (String) Attr ATTRIBUTE_NODE Le nom de l'attribut. CDATASection CDATA_SECTION_NODE "#cdatasection"
getNodeValue() getAttributes() (String) (NamedNodeMap) La valeur de null l'attribut. Le contenu null de la section CDATA. Comment COMMENT_NODE "#comment" Le contenu du null commentaire. Document DOCUMENT_NODE "#document" null null DocumentFragment DOCUMENT_FRAGMENT_NODE "#documentnull null fragment" DocumentType DOCUMENT_TYPE_NODE Le nom du null null type. Element ELEMENT_NODE Le nom du tag. null Les attributs de l'lment. Entity ENTITY_NODE Le nom de null null l'entit. EntityReference ENTITY_REFERENCE_NODE Le nom null null de l'entit rference. Notation NOTATION_NODE Le nom de la null null notation. ProcessingInstruction PROCESSING_INSTRUCTION_NODE La cible de Les donnes null l'instruction. de l'instruction. Text TEXT_NODE "#text" Le texte en lui- null mme. Si vous voulez rcuprer le texte contenu dans un node (et dans l'ensemble de ses enfants), utilisez la mthode getTextContent(). Pour viter toute ambiguit lors de l'utilisation d'Element, prfrez les mthodes spcifiques de cette interface (cf. Comment accder au contenu et aux attributs d'un Element ?). lien : Comment parcourir l'arborescence d'un DOM ? lien : Comment accder au contenu et aux attributs d'un Element ?
A partir de cette racine, vous pouvez parcourir l'enseble du document. Voici les mthodes utiliser : Mthodes de l'interface Node getChildNodes : retourne une NodeList contenant l'ensemble des nodes enfants.
- 24 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
getFirstChild : retourne le premier Node enfant. getLastChild : retourne le dernier Node enfant. getNextSibling : retourne la prochaine occurrence du Node. getParentNode : retourne le noeud parent du Node. getPreviousSibling: retourne la prcdente occurrence du Node.
Mthodes de l'interface Element getElementsByTagName : retourne une NodeList contenant les lments enfants dont le tag correspond au nom pass en paramtre (* pour renvoyer tous les lments). getElementsByTagNameNS : mme chose que getElementByTagName, avec prise en compte des namespace.
Exemple d'utilisation :
String url = "http://www.w3.org/"; List<Element> liens = getLinks(url); for(Element lien : liens){ String href = lien.getAttribute("href");
- 25 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
String texte = lien.getTextContent(); texte = (texte!=null)?texte:href; System.out.println("Lien "+texte+" pointe sur "+href);
Vous pouvez tlcharger cet exemple ci-dessous. Pour avoir plus d'informations sur un Element (ou un attribut) dfinit par un schma, utilisez la mthode getSchemaTypeInfo(). LiensXHTML.zip
Cela mritait d'tre soulign car l'erreur (la confusion entre Node et Element) est souvent commise. Ces mthodes sont relativement limites. Pour des oprations plus complexes, regardez du ct de XPath : Qu'est ce que XPath ? Pourquoi l'utiliser ?. lien : Qu'est ce que XPath ? Pourquoi l'utiliser ?
- 26 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
ainsi import, contrairement adoptNode, est une simple copie. Le noeud est retourn comme rsultat. renameNode(Node n, String namespaceURI, String qualifiedName) : renomme le noeud pass en paramtre et retourne ce dernier. Attention, seuls les nodes de type item et Attr peuvent tre ainsi renomms. setDocumentURI(String documentURI) : remplace l'URI du document. setXmlStandalone(boolean xmlStandalone) : dfinit si le XML est "standalone" ou non. setXmlVersion(String xmlVersion) : dfinit la version du XML ("1.0" par dfaut). normalizeDocument() : cette mthode valide les modifications apportes au DOM. Voir aussi la mthode normalize() de l'interface Node.
Mthodes de Node appendChild(Node newChild) : ajoute le noeud pass en paramtre la fin des autres enfants du node. cette mthode retourne le noeud ajout. insertBefore(Node newChild, Node refChild) : insre "newChild" avant "refChild" et retourne "newChild". removeChild(Node oldChild) : supprimme le noeud pass en paramtre et le retourne. replaceChild(Node newChild, Node oldChild) : remplace oldChild par newChild et retourne oldChild. setNodeValue(String nodeValue) : met "nodeValue" comme valeur pour le noeud. Voir Quels sont les diffrents types de nodes ? pour connatre les valeurs possibles. setPrefix(String prefix) : met "prefix" comme nouveau prfixe du noeud. setTextContent(String textContent) : met "textContent" comme contenu du noeud. Attention, ceci supprimme l'ensemble des noeuds enfants.
Mthodes de Element removeAttribute(String name) : supprimme l'attribut nomm. setAttribute(String name, String value) : cre un nouvel attribut (ou modifie la valeur de l'attribut si il existe dj). setIdAttribute(String name, boolean isId) : cre un nouvel attribut de type ID (ou modifie la valeur de l'attribut si il existe dj).
Ces trois mthodes ont toutes des variantes. Les mthodes XXXNode permettent notamment de retourner l'instance de Attr modifie ou supprimme. Pour un exemple d'utilisation de quelques une de ces mthodes, regardez Comment crer un DOM de toutes pices?. Ces mthodes ne modifient que l'arbre en mmoire. Pour modifier la source XML, vous devez utiliser XSLT : Comment crer ou modifier un fichier XML avec DOM et XSLT ?. lien : Comment crer ou modifier un fichier XML avec DOM et XSLT ? lien : Comment crer un DOM de toutes pices? lien : Quels sont les diffrents types de nodes ?
Voici un exemple :
// Cration d'un nouveau DOM DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance(); DocumentBuilder constructeur = fabrique.newDocumentBuilder(); Document document = constructeur.newDocument(); // Proprits du DOM document.setXmlVersion("1.0"); document.setXmlStandalone(true); // Cration de l'arborescence du DOM Element racine = document.createElement("annuaire"); racine.appendChild(document.createComment("Commentaire sous la racine")); Element personne = document.createElement("personne"); personne.setAttribute("id","0"); racine.appendChild(personne); Element nom = document.createElement("nom"); nom.setTextContent("un nom"); personne.appendChild(nom); Element prenom = document.createElement("prenom"); prenom.setTextContent("un prnom"); personne.appendChild(prenom); Element adresse = document.createElement("adresse"); adresse.setTextContent("une adresse"); personne.appendChild(adresse); document.appendChild(racine);
Pour sauvegarder ce DOM sous forme de XML, vous devrez utiliser XSLT (cf. Comment crer ou modifier un fichier XML avec DOM et XSLT ?). Vous pouvez tlcharger une exemple ci-dessous. lien : Comment crer ou modifier un fichier XML avec DOM et XSLT ? CreationDOM.zip
DOMSource domSource = new DOMSource(document); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); transformer.transform(domSource, result); String stringResult = writer.toString();
- 29 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Source image : J2EE 1.4 Tutorial L'application commence par rcuprer un transformeur (javax.xml.transform.Transformer) partir d'une fabrique de transformeurs (javax.xml.transform.TransformerFactory). C'est ce transformeur qui va tre charg de transformer une source (javax.xml.transform.Source) en rsultat (javax.xml.transform.Resultat). Par dfaut, si aucune vritable transformation n'est demande, le transformeur va simplement copier la source dans le rsultat. La source et le rsultat peuvent tre respectivement un parseur SAX, un DOM, une InputSource et un ensebble d'vnements SAX, un DOM ou une OutputSource. Pour une configuration pratique du transformeur, regardez : Comment crer et configurer un Transformer (pour SAX et DOM) ? Pour des exemples, regardez : Comment crer ou modifier un fichier XML avec DOM et XSLT ? et Comment crer ou modifier un fichier XML avec SAX et XSLT ? lien : Comment crer et configurer un Transformer (pour SAX et DOM) ? lien : Comment crer ou modifier un fichier XML avec DOM et XSLT ?
- 30 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Pour configurer votre fabrique, regardez par exemple : Comment grer les erreurs durant la transformation ? . Pour connatre toutes les clefs javax.xml.transform.OutputKeys. disponibles pour le Transformer, regardez la classe
Utilisation :
Transformer transformeur = ...; transformeur.setErrorListener(new EcouteurDErreurs());
lien : Comment grer les erreurs durant le parsing ? lien : Comment grer les erreurs durant la cration d'un DOM ?
// Configuration du transformer TransformerFactory fabrique = TransformerFactory.newInstance(); Transformer transformer = fabrique.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); // Transformation transformer.transform(source, resultat); }catch(Exception e){ e.printStackTrace(); }
Vous pouvez tlcharger les sources d'un exemple complet ci-dessous. lien : Comment crer ou modifier un fichier XML avec SAX et XSLT ? lien : Comment crer un fichier HTML partir d'un XML ? lien : Comment crer un fichier PDF partir d'un XML ? CreationDOM.zip
Aprs cel la transformation se fera comme pour un arbre DOM et un fichier : avec un Transformer et un StreamResult (pour le fichier de destination). Personne
/** * Voir zip */
AnnuaireSource
public class AnnuaireSource extends InputSource{ private List<Personne> personnes; public AnnuaireSource(List<Personne> personnes){ super(); this.personnes = personnes; } public List<Personne> getPersonnes(){ return personnes; } // En fait, contrairement cet exemple de nombreuses mthodes d'InputSource travaillent avec des streams. // Cela peut vous simplifier le travail sur des fichiers XML existants. }
- 33 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
AnnuaireReader
public class AnnuaireReader implements XMLReader{ private ContentHandler handler; private AttributesImpl atts = new AttributesImpl(); //mthode qui vont tre utilises par le transformer public ContentHandler getContentHandler(){ return handler; } public void setContentHandler(ContentHandler handler){ this.handler = handler; } // parsing d'une liste de personnes public void parse(InputSource input) throws IOException,SAXException{ if(!(input instanceof AnnuaireSource)){ String m = "Le seul argument possible pour parse est une AnnuaireSource"; throw new SAXException(m); } if(handler == null){ throw new SAXException("Pas de ContentHandler"); } AnnuaireSource source = (AnnuaireSource)input; List<Personne> personnes = source.getPersonnes(); handler.startDocument(); handler.startElement("", "annuaire", "annuaire", atts); for(Personne p : personnes){ atts.addAttribute("","id","id","",String.valueOf(p.getId())); handler.startElement("", "personne", "personne", atts); atts.clear(); handler.startElement("", "nom", "nom", atts); char[] nom = p.getNom().toCharArray(); handler.characters(nom,0,nom.length); handler.endElement("", "nom", "nom"); handler.startElement("", "prenom", "prenom", atts); char[] prenom = p.getPrenom().toCharArray(); handler.characters(prenom,0,prenom.length); handler.endElement("", "prenom", "prenom"); handler.startElement("", "adresse", "adresse", atts); char[] adresse = p.getAdresse().toCharArray() ; handler.characters(adresse,0,adresse.length); handler.endElement("", "adresse", "adresse"); handler.endElement("", "personne", "personne"); } handler.endElement("", "annuaire", "annuaire"); handler.endDocument();
} public void parse(String systemId) throws IOException,SAXException{ String m = "Le seul argument possible pour parse est une AnnuaireSource"; throw new SAXException(m); } // autres mthodes implmenter
Exemple d'utilisation :
// Cration de l'annuaire List<Personne> annuaire = new ArrayList<Personne>(); // ... //remplissage de l'annuaire
- 34 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
// Cration de la source DOM XMLReader annuaireReader = new AnnuaireReader(); InputSource annuaireSource = new AnnuaireSource(annuaire); Source source = new SAXSource(annuaireReader, annuaireSource); // Cration du fichier de sortie File file = new File("CreationSAX.xml"); Result resultat = new StreamResult(file); // Configuration du transformer TransformerFactory fabrique = TransformerFactory.newInstance(); Transformer transformer = fabrique.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); // Transformation transformer.transform(source, resultat);
Tlchargez le code source complet ci-dessous. lien : Comment crer ou modifier un fichier XML avec DOM et XSLT ? lien : Comment crer un fichier HTML partir d'un XML ? lien : Comment crer un fichier PDF partir d'un XML ? SaxXSLT.zip
Vous pouvez tlcharger ci-dessous un exemple simple avec xml, xsl et classe de test. lien : Comment crer ou modifier un fichier XML avec DOM et XSLT ?
- 35 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Vous pouvez tlcharger un exemple complet avec xml et xsl ci dessous. Verifiez bien que la librairie FOP (et ses dpendances) se trouve bien dans votre classpath avant de compiler/excuter l'exemple. lien : Comment crer un fichier HTML partir d'un XML ? CreationPDF.zip
- 36 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Source image = J2EE 1.4 Tutorial Voici une mthode prenant en arguments un fichier XML, deux feuilles de style xsl (les transformations enchaner) et un fichier html de sortie.
public static void transformer(File xml, File xsl1, File xsl2, File html) throws Exception{ // Cration du reader initial SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); XMLReader reader = spf.newSAXParser().getXMLReader(); // Cration des filtres appliquer au reader SAXTransformerFactory stf = (SAXTransformerFactory)TransformerFactory.newInstance(); XMLFilter filtre1 = stf.newXMLFilter(new StreamSource(xsl1)); XMLFilter filtre2 = stf.newXMLFilter(new StreamSource(xsl2)); // On "lie" le reader aux filtres filtre1.setParent(reader); filtre2.setParent(filtre1); // Cration de la source : c'est le dernier filtre de la chane // C'est lui qui indiquera au transformer quelles transformations faire "avant" // Le rsultat est le fichier HTML SAXSource source = new SAXSource(filtre2, new InputSource(new FileInputStream(xml))); StreamResult resultat = new StreamResult(new FileOutputStream(html)); //Transformation en chane Transformer transformer = stf.newTransformer(); transformer.transform(source, resultat);
- 37 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
lien : O trouver des informations et cours sur le langage XPath lui-mme ? lien : Je n'ai pas le dernier JDK. Comment faire pour avoir accs toutes les fonctionnalits de JAXP ? lien : Comment travailler avec XPath si je n'ai pas Java 5.0 ?
- 38 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Le principe est simple. On commence par rcuprer une instance de XPath partir d'une fabrique (XPathFactory). Ensuite, on construit une source XML (InputSource) partir du document XML sur lequel on veut travailler. Il ne reste plus qu' construire une XPathExpression partir du XPath. Cette XPathExpression va retourner (grce sa mthode evaluate()) un Object qui peut correspondre un NodeSet, un Node, un String, un Number ou un Boolean. Pour voir le code excutant ces oprations regardez : Comment obtenir une XPathExpression ? Attention : NODE, NUMBER, STRING, etc. sont des instances de QName dfinies comme des constantes de la classe XPathConstants. Il ne faut pas les confondre avec des "vrais" String ou Number. Pour plus d'informations, regardez : Que fait exactement la mthode evaluate ?. lien : Comment obtenir une XPathExpression ? lien : Que fait exactement la mthode evaluate ?
- 39 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
XPath xpath = fabrique.newXPath(); //valuation de l'expression XPath XPathExpression exp = xpath.compile(expression); Object resultat = exp.evaluate(document,retour); System.out.println(resultat); }catch(XPathExpressionException xpee){ xpee.printStackTrace(); }
Informations supplmentaires : On peut noter qu'on n'est pas oblig de passer par une instance de XPathExpression. En effet, la classe XPath dispose elle aussi d'une mthode evaluate(). Ainsi, on pourrait remplacer le code de la premire mthode par :
XPath xpath = XPathFactory.newInstance().newXPath(); Object resultat = xpath.evaluate(expression,document,retour);
Pour connatre tous les arguments et types de retour possibles pour la mthode evaluate() regardez : Que fait exactement la mthode evaluate ?
- 40 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Vous pouvez tlcharger un exemple simple d'utilisation de ces deux mthodes ci-dessous. lien : Que fait exactement la mthode evaluate ? ExempleXPath.zip
Object
String
Object
String
- 41 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Les types de retour correspondent la spcification XPath 1.0 : http://www.w3.org/TR/xpath. Voici les correspondances entre les constantes de XPathConstants (instances de QName) et les types de retour de la mthode evaluate : QName XPathConstants.NODE Type de retour org.w3c.dom.Node Description Quand un Node est requis comme type de retour, la mthode evaluate() retourne une instance de org.w3c.Node correspondant au premier noeud satisfaisant l'expression XPath. Quand un NodeSet est requis comme type de retour, la mthode evaluate() retourne une instance de org.w3c.NodeList correspondant aux noeuds slectionns par l'expression XPath. Quand un String est requis comme type de retour la mthode evaluate() retourne le contenu du ou des noeuds satisfaisant l'expression XPath (enfants compris). Quand un Boolean est requis comme type de retour la mthode evaluate() retourne Boolean.TRUE si au moins un noeud est slectionn, Boolean.FALSE sinon. Quand un Number est requis comme type de retour la mthode evaluate() essaye de transformer le contenu du noeud slectionn en Double.
XPathConstants.NODESET
org.w3c.dom.NodeList
XPathConstants.STRING
java.lang.String
XPathConstants.BOOLEAN
java.lang.Boolean
XPathConstants.NUMBER
java.lang.Double
Pour un exemple pratique d'utilisation de chacune de ces mthodes regardez les liens ci-dessous. Comment rcuprer un ensemble de noeuds avec XPath ? Comment rcuprer un Node avec XPath ? Comment rcuprer un boolen partir d'une expression XPath ? Comment rcuprer une chane de caractres avec XPath ? Comment rcuprer un nombre partir d'une expression XPath ?
lien : Comment rcuprer un ensemble de noeuds avec XPath ? lien : Comment rcuprer un Node avec XPath ? lien : Comment rcuprer un boolen partir d'une expression XPath ? lien : Comment rcuprer une chane de caractres avec XPath ?
- 42 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
utiliser
la
mthode
Pour voir un exemple d'utilisation, regardez : Comment rcuprer une chane de caractres avec XPath ? lien : Comment rcuprer une chane de caractres avec XPath ?
On peut utiliser cette mthode pour, par exemple, rcuprer l'ensemble des titres des articles publis (RSS 2.0) sur le blog de developpez.com.
URL url = new URL("http://blog.developpez.com/xmlsrv/rss2.php?blog=1"); String expression = "//item/title"; System.out.println("Articles disponibles sur le blog de developpez.com"); NodeList liste = evaluer(url.openStream(),expression); if(liste != null){ for(int i=0; i&<liste.getLength(); i++){ Node node = liste.item(i); System.out.println(node.getTextContent()); } }
On peut utiliser cette mthode, par exemple pour rcuprer le titre du premier article publi sur le blog de developpez.com (RSS 2.0).
URL url = new URL("http://blog.developpez.com/xmlsrv/rss2.php?blog=12"); String expression = "rss/channel/item/title"; Node node = evaluer(url.openStream(),expression); System.out.println(node.getTextContent());
- 44 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
} return b;
Cette mthode peut tre utilise, par exemple, pour vrifier si le dernier article publi sur le blog de developpez.com appartient la rubrique Java.
URL url = new URL("http://blog.developpez.com/xmlsrv/rss2.php?blog=1"); String expression = "rss/channel/item[position()=1 and contains(./link/text(),'blog=12')]"; Boolean b = evaluer(url.openStream(),expression); String s = ""; if(b){ s = "Le premier message du blog de developpez.com appartient la rubrique Java"; }else{ s = "Le premier message du blog de developpez.com n'appartient pas la rubrique Java"; } System.out.println(s);
- 45 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
NamespaceContext namespace){ String string = null; try{ //cration de la source InputSource source = new InputSource(stream); //cration du XPath XPathFactory fabrique = XPathFactory.newInstance(); XPath xpath = fabrique.newXPath(); if(namespace != null){ xpath.setNamespaceContext(namespace); } //valuation de l'expression XPath XPathExpression exp = xpath.compile(expression); string = (String)exp.evaluate(source,XPathConstants.STRING); }catch(XPathExpressionException xpee){ xpee.printStackTrace(); } return string;
On peut utiliser cette mthode pour, par exemple, rcuprer le contenu du premier article publi (RSS 2.0) sur le blog de developpez.com. Ce contenu peut tre directement affich dans un JTextPane.
URL url = new URL("http://blog.developpez.com/xmlsrv/rss2.php?blog=1"); String expression = "//item/content:encoded"; NamespaceContext namespace = new NamespaceContext(){ public String getNamespaceURI(String prefix){ if("content".equals(prefix)){ return "http://purl.org/rss/1.0/modules/content/"; }else{ return null; } } public String getPrefix(String namespaceURI){ if("http://purl.org/rss/1.0/modules/content/".equals(namespaceURI)){ return "content"; }else{ return null; } } public Iterator getPrefixes(String namespaceURI){ return null; } }; String article = evaluer(url.openStream(),expression,namespace); JTextPane pane = new JTextPane(); pane.setContentType("text/html"); pane.setPreferredSize(new Dimension(200,200)); JScrollPane scroll = new JScrollPane(pane); JFrame frame = new JFrame(); //etc. frame.setVisible(true); pane.setText(article);
- 46 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Cette mthode peut tre utilise pour, par exemple, compter le nombre de news concernant J2EE et publies (RSS 2.0) sur le blog de la rubrique Java.
URL url = new URL("http://blog.developpez.com/xmlsrv/rss2.php?blog=12"); String expression = "count(rss/channel/item/category[text()='3. Technologie J2EE'])"; Double number = evaluer(url.openStream(),expression); System.out.println("Il y a "+number+" news J2EE sur le blog de la rubrique Java");
- 47 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages
Enfin, n'oubliez pas que vous pouvez tlcharger JAXP de manire indpendante : https://jaxp.dev.java.net/
- 48 Les codes sources prsents sur cette page sont libres de droits, et vous pouvez les utiliser votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protge par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis deux licences, en fonction des contributeurs : - Les contributions de Clment Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies des contributions de Clment Cunin et Johann Heymes tant que cette note apparat clairement : "Ce document issu de http://www.developpez.com est soumis la licence GNU FDL traduite en franais ici. Permission vous est donne de distribuer, modifier des copies de cette page tant que cette note apparat clairement". - Pour ce qui est des autres contributions : Copyright 2006 Developpez LLC : Tous droits rservs Developpez LLC. Aucune reproduction ne peut en tre faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages