IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Extraire du XML d'un XML


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Extraire du XML d'un XML
    Bonjour,

    Développeur JAVA averti, j'aimerais pour un besoin professionnel extraire des morceaux de XML d'un fichier XML.

    Je donne un exemple :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <titi>
    <tata><toto id="1">zen</toto></tata>
    </titi>

    J'aimerais dans l'exemple ci-dessus récupérer par exemple :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <tata><toto id="1">zen</toto></tata>

    Cependant j'ai utilisé un code JAVA qui permet de faire du XPATH, code trouvé ici sur ce site sur une page intitulé "parcours de fichiers XML".

    Mais mon souci c'est que je ne récupère que le contenu des balises XML alors que je voudrais aussi les balises.

    Quelqu'un a une idée ?

    Merci !

    A vous lire.

  2. #2
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    En travaillant avec une String peut être?

  3. #3
    Membre actif Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Points : 251
    Points
    251
    Par défaut
    ça dépend du path que tu spécifies . il faudra s'arrêter à titi pour qu'il puisse te retourner tout son contenu . Mais à mon avis il y'a mieux que le XPath.

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui je pense qu'il y a mieux que XPath...

    Ben quand je passe titi, il me donne juste :
    "zen"

    alors que je voudrais aussi les balises XML...

    Pour mieux me faire comprendre, je vous passe ma classe XPathCDM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
    package fr.ustl.uniform.beans;
     
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;
    import org.jdom.Element;
    import org.jdom.Attribute;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.jdom.xpath.XPath;
     
    /**
     *
     * @author Mathieu H
     */
    public class XPathCDM {
        File oFichier = null;
     
        // constructeur vide
        public XPathCDM() {}
     
        // constructeur avec fichier en parametre
        public XPathCDM(File oFichier) {
        	this.oFichier = oFichier;
        }
     
        // setteur pour injecter le fichier CDM
        public void setFile(File oFichier) {
        	this.oFichier = oFichier;
        }
     
        // getteur pour récupérer le fichier CDM
        public File getFile() {
        	return this.oFichier;
        }
     
        public String getValue(String cChemin) {
        	// initialisation des variables    	
        	org.jdom.Document oDocument = null ;
        	String cRetour = "";
        	Element oElement = null;
     
        	// on teste si un fichier CDM existe.
        	if (this.oFichier == null) {
        		System.out.println("Erreur lors du parsage du chemin [" + cChemin + "] : vous devriez d'abord spécifier un fichier CDM à parser.");
        		return "";
        	}
     
        	// on crée l'objet Document à partir du fichier CDM
            try {
                // on crée l'objet SAXBuilder
                SAXBuilder oSxb = new SAXBuilder();
                // on crée le document à partir du fichier CDM
                oDocument = oSxb.build(this.oFichier);
            } catch (IOException e) {
                System.out.println("Erreur lors de la lecture du fichier " + e.getMessage() + "]");
                e.printStackTrace();
            } catch (JDOMException e){
                System.out.println("Erreur lors de la construction du fichier JDOM [" + e.getMessage() + "]");
                e.printStackTrace();
            }
     
            try {
                // on initialise un nouvel élément avec l'élément racine du document.
                Element oRacine = oDocument.getRootElement();
     
                // on crée une instance XPath avec le chemin
                XPath oXpa = XPath.newInstance(cChemin);   
     
                // on récupére le noeud
                oElement = (Element) oXpa.selectSingleNode(oRacine);
     
                // on extrait la valeur du noeud
                cRetour = oXpa.valueOf(oElement);
                //cRetour = oElement.toString();
     
            } catch (JDOMException e) {
                System.out.println("Erreur JDOM [" + e.getMessage() + "]");
                e.printStackTrace();            
            }
     
            return cRetour;
        }
     
        public String getAttribut(String cChemin, String cAttribut) {
        	// initialisation des variables    	
        	org.jdom.Document oDocument = null ;
        	String cRetour = "";
        	Element oElement = null;
     
        	// on teste si un fichier CDM existe.
        	if (this.oFichier == null) {
        		System.out.println("Erreur lors du parsage du chemin [" + cChemin + "] : vous devriez d'abord spécifier un fichier CDM à parser.");
        		return "";
        	}
     
        	// on crée l'objet Document à partir du fichier CDM
            try {
                // on crée l'objet SAXBuilder
                SAXBuilder oSxb = new SAXBuilder();
                // on crée le document à partir du fichier CDM
                oDocument = oSxb.build(this.oFichier);
            } catch (IOException e) {
                System.out.println("Erreur lors de la lecture du fichier " + e.getMessage() + "]");
                e.printStackTrace();
            } catch (JDOMException e){
                System.out.println("Erreur lors de la construction du fichier JDOM [" + e.getMessage() + "]");
                e.printStackTrace();
            }
     
            try {
                // on initialise un nouvel élément avec l'élément racine du document.
                Element oRacine = oDocument.getRootElement();
     
                // on crée une instance XPath avec le chemin
                XPath oXpa = XPath.newInstance(cChemin);   
     
                // on récupére le noeud demandé
                oElement = (Element) oXpa.selectSingleNode(oRacine);
     
                // on récupére l'attribut à partir du noeud demandé
                oXpa = XPath.newInstance(cAttribut);
     
                // on extrait la valeur demandée (ici l'attribut)
                cRetour = oXpa.valueOf(oElement);
     
            } catch (JDOMException e) {
                System.out.println("Erreur JDOM [" + e.getMessage() + "]");
                e.printStackTrace();            
            }
     
            return cRetour;
        }
     
    }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2005
    Messages : 11
    Points : 14
    Points
    14
    Par défaut
    une autre methode, pourrait-etre de parser ton fichier en mode texte et d'utiliser une regexp du type :

    <tag[^>]*>(.*?)</tag> ou tag est la balise recherchée

    un tres bon lien ici :
    http://immike.net/blog/2007/04/06/5-...r-should-know/

  6. #6
    Membre actif Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Points : 251
    Points
    251
    Par défaut
    Voici une classe que j'avais écrite. ça peut servir d'exemple. Par contre je n'utilise pas jdom mais plus tôt les bibliothèques natives de java qui sont les spécifications.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    import org.w3c.dom.*; 
    import org.xml.sax.*;
    import javax.xml.*; 
    import javax.xml.parsers.*; 
    import javax.xml.transform.*; 
    import javax.xml.transform.dom.*; 
    import javax.xml.transform.sax.*; 
    import javax.xml.xpath.*; 
    import javax.xml.namespace.*; 
    import java.io.*;
    
    public class ExempleXPath{
    	public static void evaluerDOM(Document document, String expression, QName retour){
    		try{
    			//création du XPath 
    			XPathFactory fabrique = XPathFactory.newInstance();
    			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();
    		}
    	}
    	public static void evaluerSAX(File fichier, String expression, QName retour){
    		try{
    			//création de la source
    			InputSource source = new InputSource(new FileInputStream(fichier));
    			
    			//création du XPath 
    			XPathFactory fabrique = XPathFactory.newInstance();
    			XPath xpath = fabrique.newXPath();
    			
    			//évaluation de l'expression XPath
    			XPathExpression exp = xpath.compile(expression);
    			Object resultat = exp.evaluate(source,retour);
    			
    			System.out.println(resultat);
    		}catch(XPathExpressionException xpee){
    			xpee.printStackTrace();
    		}catch(IOException  ioe){
    			ioe.printStackTrace();	
    		}
    	}
    	public static void main(String[] args){
    		try{
    			DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
    			
    			DocumentBuilder constructeur = fabrique.newDocumentBuilder();
    			
    			File xml = new File("test.xml");	
    			Document document = constructeur.parse(xml);
    			evaluerDOM(document, "/titi", XPathConstants.STRING);
    		}catch(Exception e){
    			e.printStackTrace();	
    		}
    		
    		/*try{
    			File xml = new File("Ged/fichier.xml");
    			evaluerSAX(xml, "//toto[@id='1']", XPathConstants.STRING);
    		}catch(Exception e){
    			e.printStackTrace();	
    		}*/
    	}	
    }
    tout dépend du type de retour que tu demande. soit c'est du text (XPathConstants.STRING) alors tu n'auras que le text par contre si tu veux tout le contenu de la balise tu devras spècifier Node ou NodeSet.

    T'as tout ce qu'il faut ici http://java.developpez.com/faq/xml/?page=xpath

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci à tous.

    Merci jiddou... je viens de tester ton code ce matin jiddou...


    Et je n'arrive toujours pas à afficher les balises...

    Je ne récupère que "zen"...

    De plus j'ai modifié un peu le code de facon à afficher les noeuds...

    Et en NodeList, je ne récupère qu'un seul noeud (???), je comprend pas... c'est normal ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    import org.w3c.dom.*; 
    import org.xml.sax.*;
    import javax.xml.*; 
    import javax.xml.parsers.*; 
    import javax.xml.transform.*; 
    import javax.xml.transform.dom.*; 
    import javax.xml.transform.sax.*; 
    import javax.xml.xpath.*; 
    import javax.xml.namespace.*; 
    import java.io.*;
     
    public class ExempleXPath{
    	public static void evaluerDOM(Document document, String expression, QName retour){
    		try{
    			//création du XPath 
    			XPathFactory fabrique = XPathFactory.newInstance();
    			XPath xpath = fabrique.newXPath();
     
    			//évaluation de l'expression XPath
    			XPathExpression exp = xpath.compile(expression);
    			//Object resultat = exp.evaluate(document,retour);
    			//System.out.println(resultat);			
     
    			NodeList liste = (NodeList) exp.evaluate(document,retour);
    			if(liste != null){
    				System.out.println("il y a " + liste.getLength() + " noeud(s) à afficher...");
    				for(int i=0; i<liste.getLength(); i++){
    					Node node = liste.item(i);
    					//if (node.hasChildNodes)
    					System.out.println("<" + node.getNodeName() + ">" + node.getTextContent() + "</" + node.getNodeName() + ">");
    				}
    			}			
     
     
    		}catch(XPathExpressionException xpee){
    			xpee.printStackTrace();
    		}
    	}
    	public static void evaluerSAX(File fichier, String expression, QName retour){
    		try{
    			//création de la source
    			InputSource source = new InputSource(new FileInputStream(fichier));
     
    			//création du XPath 
    			XPathFactory fabrique = XPathFactory.newInstance();
    			XPath xpath = fabrique.newXPath();
     
    			//évaluation de l'expression XPath
    			XPathExpression exp = xpath.compile(expression);
    			Object resultat = exp.evaluate(source,retour);
     
    			System.out.println(resultat);
    		}catch(XPathExpressionException xpee){
    			xpee.printStackTrace();
    		}catch(IOException  ioe){
    			ioe.printStackTrace();	
    		}
    	}
    	public static void main(String[] args){
    		try{
    			DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
     
    			DocumentBuilder constructeur = fabrique.newDocumentBuilder();
     
    			File xml = new File("test.xml");	
    			Document document = constructeur.parse(xml);
    			evaluerDOM(document, "/titi", XPathConstants.NODESET);
    		}catch(Exception e){
    			e.printStackTrace();	
    		}
     
    		/*try{
    			File xml = new File("Ged/fichier.xml");
    			evaluerSAX(xml, "//toto[@id='1']", XPathConstants.STRING);
    		}catch(Exception e){
    			e.printStackTrace();	
    		}*/
    	}	
    }

  8. #8
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    A quoi bon utiliser DOM et xPath pour faire un truc contre-nature...

    +1 pour enwoo

    Ton xml -> String -> regexp et le tour est joué.

  9. #9
    Membre actif Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Points : 251
    Points
    251
    Par défaut
    Oui Parker_ c'est normal parce que tout simplement tu n'as qu'un seul nœud qui est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tata><toto id="1">zen</toto></tata>
    et à partir de là tu peux le parcourir pour accéder au nœud toto.

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par enwoo Voir le message
    une autre methode, pourrait-etre de parser ton fichier en mode texte et d'utiliser une regexp du type :

    <tag[^>]*>(.*?)</tag> ou tag est la balise recherchée

    un tres bon lien ici :
    http://immike.net/blog/2007/04/06/5-...r-should-know/
    enwoo ton lien ne marche pas... tu pourrais m'en donner un qui fonctionne ? stp ?

    ca m'intéresse !

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Le role d'xpath c'est de sélectionner et il le fait très bien, il récupere le noeud en mémoire et permet de le manipuler.
    Mais pour ré-écrire du xml, il faut lui adjoindre l'utilisation d'un sérialiser (XMLSerializer en java). Si on lui demande de serialiser le noeud tata, il écrira ce noeud et tous ses enfants.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 64
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    J'ai le meme probleme que celui de Parker, si vous avez une solution, donnez la moi.

    Merci d'avance.

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    http://java.developpez.com/faq/xml/?..._DOM_to_string
    C'est pour convertir un document en String, il suffit de sélectionner le noeud souhaité et d'en faire une source : new DOMSource(Node n)

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 64
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    J'ai un petit code qui demande la balise à extraire du fichier xml en entrée et donne en retour son contenu, mais il ne retourne que la première balise, est ce que quelqu'un pourrait m'aider à le corriger svp.

    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    /* -*-Java-*- (encoding:iso8859-1) 
    * ######################################################################## 
    * 
    * FILE: "XML.java" 
    * 
    * History 
    * 
    * modified by rev reason 
    * ---------- --- --- ----------- 
    * 2006-11-24 FBO 1.0 original 
    * 
    * ######################################################################## 
    */ 
    //Représente un fichier sur disque 
    import java.io.BufferedReader; 
    import java.io.File; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.PrintWriter; 
    import javax.xml.parsers.ParserConfigurationException; 
    import javax.xml.parsers.SAXParser; 
    import javax.xml.parsers.SAXParserFactory; 
     
    import org.w3c.dom.NodeList; 
    import org.xml.sax.Attributes; 
    import org.xml.sax.SAXException; 
    import org.xml.sax.helpers.DefaultHandler; 
    public class Exemple { 
    public static void main(String[] args) { 
    // Notre fichier d'exemple XML 
     
    File f = new File("exemple.xml"); 
     
    SAXParser p = null; 
    // On crée maintenant un parseur SAX pour relire notre fichier 
    try { 
    p = SAXParserFactory.newInstance().newSAXParser(); 
    // On active les namespaces, sinon, on ne récupèrera pas le nom 
    // des éléments dans les méthodes start/endElement 
    p.getXMLReader().setFeature("http://xml.org/sax/features/namespaces", true); 
    } catch (ParserConfigurationException pce) { 
    System.err.println("Impossible de créer le parseur SAX."); 
    System.err.println(pce); 
    System.exit(1); 
    } catch (SAXException saxe) { 
    System.err.println("Erreur SAX."); 
    System.err.println(saxe); 
    System.exit(1); 
    } 
    // On demande maintenant au parseur d'analyser le fichier en signalant 
    // les événements à une instance de MonGestionnaire. 
    try { 
    p.parse(f, new MonGestionnaire()); 
    } catch (SAXException saxe) { 
    System.err.println("Erreur SAX."); 
    System.err.println(saxe); 
    System.exit(1); 
    } catch (IOException ioe) { 
    System.err.println("Erreur de lecture du fichier."); 
    System.err.println(ioe); 
    System.exit(1); 
    } 
    } 
    } 
    /** 
    * Notre gestionnaire d'événements SAX 
    */ 
    class MonGestionnaire extends DefaultHandler { 
    /** Appelée avant toutes les autres méthodes, au début du document. */ 
    // public void startDocument() { 
    // System.out.println("--Début du document--"); 
    // } 
    /** Appelée après toutes les autres méthodes, à la fin du document. */ 
    // public void endDocument() { 
    // System.out.println(); 
    // System.out.println("--Fin du document--"); 
    // } 
    /** 
    * Appelée à chaque fois qu'un élément est rencontré. 
    * - uri est l'URI de l'espace de nom auquel appartient l'élément 
    * - localName est le nom de l'élément (sans préfixe d'espace de nom) 
    * - qName est le nom qualifié de l'élément (avec préfixe d'espace de nom) 
    * - attributes est la liste des attributs de l'élément. 
    * @throws IOException 
    */ 
    public void startElement(String uri, String localName, 
    String qName, Attributes attributes) { 
    BufferedReader keyboard=new BufferedReader(new InputStreamReader(System.in)); 
    String line = ""; 
    System.out.print("donner la balise"); 
    try{ 
    line=keyboard.readLine(); 
    }catch(IOException e){ 
    System.out.println("err"); 
    } 
    //int j=0; 
     
    if(localName.equals(line)){ 
     
    System.out.print("<" + localName); 
     
    for (int i = 0; i < attributes.getLength(); i++) { 
    System.out.print(" " + attributes.getLocalName(i) 
    + "=\"" + attributes.getValue(i) + "\""); 
    } 
    System.out.print(">"); 
    } 
    } 
    /** Appelée à chaque fois qu'une fin d'élément est rencontrée. */ 
    public void endElement(String uri, String localName, String qName) { 
     
    System.out.print("</" + localName + ">"); 
    } 
     
    /** Fournit les données trouvées à l'intérieur d'un élément. */ 
    public void characters(char[] ch, int start, int length) { 
    System.out.print(new String(ch, start, length)); 
    } 
    /** Fournit des espaces ignorables trouvés à l'intérieur d'un élément. */ 
    public void ignorableWhitespace(char[] ch, int start, int length) { 
    for(int i = 0; i < length; i++) { 
    System.out.print('_'); 
    } 
    // System.out.print(new String(ch, start, length)); 
    } 
    }

  15. #15
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    J'ai poste ceci ayant a la meme demande (extraire un sous arbre XML)

    http://www.developpez.net/forums/d87...arbres-balise/

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    merci ttttnht

    mais est ce que ce code me retournerait le XML en texte (String) ?

  17. #17
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 636
    Points
    21 636
    Par défaut
    Hmm, vu que tu utilises déjà JDOM, je ferais autrement.

    Une fois que tu as récupéré ton élément, pour l'afficher tu utilises XMLOutputter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    new XMLOutputter().output(element, System.out);
    System.out.println();
    Simple et efficace, comme souvent avec JDOM.

  18. #18
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Parker_ Voir le message
    merci ttttnht

    mais est ce que ce code me retournerait le XML en texte (String) ?
    Bonsoir,
    je ne sais pas si c'est le bon endroit pour poser ma question, mais j'ai trouvé un peu de similarité avec mon problème

    j'utilise actuellement JDOM, mais je suis encore débutante

    j'ai un fichier XML sous format String (récupéré TextArea),
    est ce que c'est possible de le manipuler avec JDOM ?
    ensuite j'ai voulu l'enregistrer sous format XML avec JDOM, c'est possible? j'ai essayé mais il y a l'erreur de type de donnée (on me demande le format Text mais j'ai pas su le déclarer )


    merci d'avance si vous avez des idées sur l'une des deux questions

  19. #19
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 636
    Points
    21 636
    Par défaut
    Citation Envoyé par mina_mi Voir le message
    je ne sais pas si c'est le bon endroit pour poser ma question, mais j'ai trouvé un peu de similarité avec mon problème
    Ah bon ? Moi pas, mais bon, pas bien grave.

    Citation Envoyé par mina_mi Voir le message
    j'ai un fichier XML sous format String (récupéré TextArea),
    est ce que c'est possible de le manipuler avec JDOM ?
    Bien sûr, pourquoi pas ? La méthode build() de SAXBuilder peut prendre un InputStream ou un Reader en paramètre. Il suffit donc de transformer la String en l'un ou l'autre, le plus simple étant donc le Reader :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Document doc = new SAXBuilder().build(new StringReader(xmlText));
    ensuite j'ai voulu l'enregistrer sous format XML avec JDOM, c'est possible?
    Oui, avec XMLOutputter. Je te laisse lire sa JavaDoc, hein...

    j'ai essayé mais il y a l'erreur de type de donnée (j'ai me demande le format Text mais j'ai pas su le déclarer )
    Qu'est-ce que quoi de quelle erreur que quoi à propos de Text ?

  20. #20
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Bien sûr, pourquoi pas ? La méthode build() de SAXBuilder peut prendre un InputStream ou un Reader en paramètre. Il suffit donc de transformer la String en l'un ou l'autre, le plus simple étant donc le Reader :
    merci pour votre réponse



    Citation Envoyé par thelvin Voir le message
    Oui, avec XMLOutputter. Je te laisse lire sa JavaDoc, hein...
    j'ai essayé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new XMLOutputter().output("<a></a>", new FileOutputStream(fichier));
    mais ça ne marche pas !! (le principe c'est un String comme entrée, d'habitude j'utilise Document)


    Citation Envoyé par thelvin Voir le message
    Qu'est-ce que quoi de quelle erreur que quoi à propos de Text ?
    j'ai cherché dans la doc de JDOM
    et j'ai trouvé que le output, parmi ses parametre j'ai trouvé "Text", j'ai voulu l'essayer vu que c'est le plus proche du String mais j'ai pas pu!!
    output

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void output(Text text,
                       java.io.OutputStream out)
                throws java.io.IOException
     
        Print out a Text node. Perfoms the necessary entity escaping and whitespace stripping.
     
        Parameters:
            text - Text to output.
            out - OutputStream to use. 
        Throws:
            java.io.IOException
    http://www.jdom.org/docs/apidocs/org...utputStream%29

Discussions similaires

  1. [PHP4] Extraire données de document kml (xml)
    Par le coin-coin dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 21/01/2016, 14h50
  2. Réponses: 0
    Dernier message: 02/04/2009, 13h10
  3. Réponses: 5
    Dernier message: 02/04/2008, 15h07
  4. Extraire données d'un webservice , xml , php ..
    Par Lettue dans le forum Langage
    Réponses: 1
    Dernier message: 14/09/2006, 19h24
  5. Extraire le contenu des balises XML
    Par calimero2611 dans le forum Modules
    Réponses: 7
    Dernier message: 12/06/2006, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo