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 :

Parser un fichier xml


Sujet :

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

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 157
    Par défaut Parser un fichier xml
    Bonjour à tous, voilà j'aimerais récupérer des valeurs dans l'arborescence de mon fichier xml
    J'arrive par exemple à récupérer les valeurs des éléments "url" du fichier en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    List list = racine.getChildren("requete");                    
     Iterator i = list.iterator();                
                       while(i.hasNext())
                       {                    
                          Element courant = (Element)i.next();
                          System.out.println(courant.getChild("url").getText());                            }
    mais je n'arrive pas à récupérer les valeurs de mon élément "driver" par exemple
    Voici mon fichier Xml :
    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
     
    <requetes>
          <requete>
            <url>http://xxxx</url>    
            <url>http://xxxx</url>    
            <database>
                <driver>xxx</driver>
                <adresse>xxx</adresse>            
            </database>
        </requete>
        <requete>
            <url>http://xxxx</url>    
            <url>http://xxxx</url> 
            <database>
                <driver>xxx</driver>
                <adresse>xxx</adresse>   
            </database>
    </requetes>
    Il n'est pas possible de faire cela par rapport à mon exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    List list = racine.getChildren("database");                    
     Iterator i = list.iterator();                
                       while(i.hasNext())
                       {                    
                          Element courant = (Element)i.next();
                          System.out.println(courant.getChild("driver").getText());                            }
    Si vous pouvez m'éclairer Merci je n'est pas trouvé de doc sur jdom à part le tuto Nicolas Cynober que je remercie au passage car il m'a bien aidé

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 157
    Par défaut
    SVP
    je crois qu'il y d'autre personne qui rencontre des problemes similaires dans le forum

  3. #3
    Membre chevronné Avatar de guignol
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Par défaut
    Peut-être faut-il que tu fasses un getChildren pour récupérer la liste des éléments <url></url> Pour chaque élément de type <requete></requete>.

    Tu le fais déjà pour la racine qui possède plusieurs éléments requete, donc en toute logique ça devrait marcher...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 12
    Par défaut
    Oui en plus d'une boucle hasNext tu dois faire le meme type de traitement mais pr hasChild.
    hasNext = parcourt dans la longueur
    hasChild = parcourt dans la profondeur

  5. #5
    Membre éprouvé Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Par défaut
    C'est bien simple, dans ton format XML la balise que tu cherches (drivers) se trouve etre le fils de <database>, lui meme fils de <requete>.

    Je te rappele que si tu veux faire une recherche par "arbre" (du Dom), tu dois tenir comptes de l'arborescence de ce dernier. Voila un exemple rapide de la facon dont tu pourrais t'y prendre :

    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
     
    Element root = new Element ("requetes");
    Document doc = new Document(root);
     
    //Tu commences par lister les differents noeuds "requete"
    List node = root.getChildren("requetes");
     
    // A ce moment tu as deux choix de parcours sur ta liste, un iterateur ou une boucle for
    for (int i=0; i<node.size(); i++){ 
     
         // Maintenant tu rejoinds le niveau inferieur de ton arbre et tu listes les noeuds "database"
          Element courant = (Element)node.get(i);
          List data = courant.getChildren("database");
     
          //Tu es au niveau des noeuds recherchés
          for (int n=0; n<data.size(); n++){
              Element current = (Element)data.get(n);
              List driver = current.getChildren("driver");
             // tu peux retourner cette liste, ou ajouter ses élements à une autre....
            }
       }
    Ca c'est une methode un peu "barbare", en effet JDOM te permet de realiser des choses plus évoluées avec les Filter.
    Je te conseil de jeter un coup d'oeil a ca : http://www.jdom.org/docs/apidocs/
    et ca http://cynober.developpez.com/tutoriel/java/xml/jdom/

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 57
    Par défaut
    Bonjour, ‎

    j'ai eu le même pb que toi il n y a très longtemps et je voulais récupéré tout les élément de ‎mon document, je t'informe que le getchildren et le haschild ne te retourne que le premier ‎niveau des fils les sous fils ne sont pas pris en considération pour moi j'ai utiliser une méthode ‎récursive donc je te conseil d'aller de jeter un coup d'oeil a mon avis sa peut t'aider j'ai mis le ‎code tu la trouve dans la discussion les noeuds d'un document XML

    Bon courage‎

Discussions similaires

  1. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32
  2. [xslt] Parser 2 fichiers XML
    Par malekms dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/12/2005, 12h22
  3. Parser un fichier XML
    Par Charlinecha dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 11/07/2005, 17h18
  4. [SAX] parser un fichier xml en Java
    Par royou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/02/2005, 17h12
  5. parser des fichier .xml en perl
    Par djibril dans le forum Modules
    Réponses: 13
    Dernier message: 18/05/2004, 17h08

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