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 :

lire un fichier XML ou il existe des liste [DOM]


Sujet :

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

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut lire un fichier XML ou il existe des liste
    Bonjour a tous,
    j'ai un fichieir xml que je veux lire voici le fichier
    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
    <rechercheL:listCV>
     <rechercheL:CV>
     <rechercheL:CIN>08327010</rechercheL:CIN> 
     <rechercheL:email>steph</rechercheL:email> 
     <rechercheL:nom /> 
     <rechercheL:prenom /> 
     <rechercheL:poste /> 
     <rechercheL:listLangue>
     	<rechercheL:langues>
     		<rechercheL:Langue>a</rechercheL:Langue> 
     		<rechercheL:Niveau>a</rechercheL:Niveau> 
           </rechercheL:langues>
           <rechercheL:langues>
     		<rechercheL:Langue>b</rechercheL:Langue> 
     		<rechercheL:Niveau>b</rechercheL:Niveau> 
           </rechercheL:langues>
     
     </rechercheL:listLangue>
     <rechercheL:listFormation /> 
     <rechercheL:listExperiencePro>
     <rechercheL:experiencePro>
     <rechercheL:NomPoste>4</rechercheL:NomPoste> 
     <rechercheL:NomEntreprise>54</rechercheL:NomEntreprise> 
     </rechercheL:experiencePro>
     </rechercheL:listExperiencePro>
     </rechercheL:CV>
    </rechercheL:listCV>
    je veux l'afficher de la sorte :
    cin : 08327010
    email : steph
    langue : a
    niveau: a
    langue : b
    niveau : b
    j'ai ecrit ce code
    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
    import java.io.File;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import metier.Attribut;
     
    public class XmlJsf {
     
    	public static void main(String[] args) {
    		 try {
     
    	            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    	            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    	            Document doc = docBuilder.parse (new File("C:/format.xml"));
     
    	            // normalize text representation
    	            doc.getDocumentElement ().normalize ();
    	            System.out.println ("Root element of the doc is " + 
    	                 doc.getDocumentElement().getNodeName());
    	            NodeList listOfPersons = doc.getElementsByTagName("rechercheL:CV");
    	            int totalPersons = listOfPersons.getLength();
    	            System.out.println("Total no of people : " + totalPersons);
     
    	            for(int s=0; s<listOfPersons.getLength() ; s++){
     
     
    	                Node firstPersonNode = listOfPersons.item(s);
    	                if(firstPersonNode.getNodeType() == Node.ELEMENT_NODE){
     
     
    	                    Element firstPersonElement = (Element)firstPersonNode;
     
    	                    //-------
    	                    NodeList firstNameList = firstPersonElement.getElementsByTagName("rechercheL:CIN");
    	                    Element firstNameElement = (Element)firstNameList.item(0);
     
    	                    NodeList textFNList = firstNameElement.getChildNodes();
    	                    System.out.println("First Name : " + 
    	                           ((Node)textFNList.item(0)).getNodeValue().trim());
     
    	                    //-------
    	                    NodeList lastNameList = firstPersonElement.getElementsByTagName("rechercheL:email");
    	                    Element lastNameElement = (Element)lastNameList.item(0);
     
    	                    NodeList textLNList = lastNameElement.getChildNodes();
    	                    System.out.println("Last Name : " + 
    	                           ((Node)textLNList.item(0)).getNodeValue().trim());
     
    	                    //---- parser la langue
     
    	                    NodeList ageList = firstPersonElement.getElementsByTagName("rechercheL:Langue");
    	                    Element ageElement = (Element)ageList.item(0);
     
    	                    NodeList textAgeList = ageElement.getChildNodes();
    	                    System.out.println("liste langue : " + 
    	                           ((Node)textAgeList.item(0)).getNodeValue().trim());
     
    	                    //------
     
     
    	                }//end of if clause
     
     
    	            }//end of for loop with s var
     
     
    	        }catch (SAXParseException err) {
    	        System.out.println ("** Parsing error" + ", line " 
    	             + err.getLineNumber () + ", uri " + err.getSystemId ());
    	        System.out.println(" " + err.getMessage ());
     
    	        }catch (SAXException e) {
    	        Exception x = e.getException ();
    	        ((x == null) ? e : x).printStackTrace ();
     
    	        }catch (Throwable t) {
    	        t.printStackTrace ();
    	        }
    	        //System.exit (0);
     
    	    }//end of main
     
     
    }
    mais lors de l'affichage j'ai

    cin : 08327010
    email : steph
    langue : a

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Première remarque : dans ton code et dans ton prétendu affichage tu n'utilises pas les mêmes chaînes de caractère... alors je devine d'après le code que "First Name : " doit correspondre à "cin : " mais à première vue c'est loin d'être évident !
    Donne-nous plutôt le "vrai" affichage, ça sera bien plus clair pour tout le monde.


    Deuxième remarque : à aucun moment dans ton code tu ne parcours tes listes.
    Avec l'instruction firstPersonElement.getElementsByTagName("rechercheL:Langue") tu récupères la liste des éléments <rechercheL:Langue> (au passage : ne voulais-tu pas plutôt obtenir la liste des éléments <rechercheL:Langues> ?) mais ensuite avec l'instruction ageList.item(0) (au passage : nommer une liste de langages "liste des âges" n'est pas des plus clairs) tu récupères puis tu traites uniquement le premier élément de cette liste : tu n'as donc aucune chance d'afficher la liste des langues contenues dans le CV ! Il va falloir implémenter des parcours de liste dans des boucles...

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    bonjour merci pour la reponse,

    c'est vrai desolé jai modifier le xml mais pas le code donc voici ce que ça donne
    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
    package test;
     
    import java.io.File;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import metier.Attribut;
     
    public class XmlJsf {
     
    	public static void main(String[] args) {
    		 try {
     
    	            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    	            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    	            Document doc = docBuilder.parse (new File("C:/format.xml"));
     
    	            // normalize text representation
    	            doc.getDocumentElement ().normalize ();
    	            System.out.println ("Root element of the doc is " + 
    	                 doc.getDocumentElement().getNodeName());
    	            NodeList listOfPersons = doc.getElementsByTagName("rechercheL:CV");
    	            int totalPersons = listOfPersons.getLength();
    	            System.out.println("Total no of people : " + totalPersons);
     
    	            for(int s=0; s<listOfPersons.getLength() ; s++){
     
     
    	                Node firstPersonNode = listOfPersons.item(s);
    	                if(firstPersonNode.getNodeType() == Node.ELEMENT_NODE){
     
     
    	                    Element firstPersonElement = (Element)firstPersonNode;
     
    	                    //-------
    	                    NodeList CINList = firstPersonElement.getElementsByTagName("rechercheL:CIN");
    	                    Element CINElement = (Element)CINList.item(0);
     
    	                    NodeList textCINList = CINElement.getChildNodes();
    	                    System.out.println("CIN : " + 
    	                           ((Node)textCINList.item(0)).getNodeValue().trim());
     
    	                    //-------
    	                    NodeList emailList = firstPersonElement.getElementsByTagName("rechercheL:email");
    	                    Element emailElement = (Element)emailList.item(0);
     
    	                    NodeList textEmailList = emailElement.getChildNodes();
    	                    System.out.println("Last Name : " + 
    	                           ((Node)textEmailList.item(0)).getNodeValue().trim());
     
    	                    //---- parser la langue
     
    	                    NodeList langueList = firstPersonElement.getElementsByTagName("rechercheL:Langue");
    	                    NodeList listOfPersons1 = doc.getElementsByTagName("rechercheL:langues");
    	                    int totalPersons1 = listOfPersons1.getLength();
    	                    System.out.println("Total no of langue : " + totalPersons1);
     
    	                    for(int j=0;j<totalPersons1;j++){
    	                    Element langueElement = (Element)langueList.item(j);
     
    	                    NodeList textLangueList = langueElement.getChildNodes();
    	                   // NodeList tal = textAgeList.
    	                    System.out.println("liste langue : " + 
    	                           ((Node)textLangueList.item(j)).getNodeValue().trim());
     
    	                    //------
    	                    }
     
    	                }//end of if clause
     
     
    	            }//end of for loop with s var
     
     
    	        }catch (SAXParseException err) {
    	        System.out.println ("** Parsing error" + ", line " 
    	             + err.getLineNumber () + ", uri " + err.getSystemId ());
    	        System.out.println(" " + err.getMessage ());
     
    	        }catch (SAXException e) {
    	        Exception x = e.getException ();
    	        ((x == null) ? e : x).printStackTrace ();
     
    	        }catch (Throwable t) {
    	        t.printStackTrace ();
    	        }
    	        //System.exit (0);
     
    	    }//end of main
     
     
    }
    encore rien

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    C'est bon !!!

    solution
    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
    package test;
     
    import java.io.File;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import metier.Attribut;
     
    public class XmlJsf {
     
    	public static void main(String[] args) {
    		 try {
     
    	            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    	            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    	            Document doc = docBuilder.parse (new File("C:/format.xml"));
     
    	            // normalize text representation
    	            doc.getDocumentElement ().normalize ();
    	            System.out.println ("Root element of the doc is " + 
    	                 doc.getDocumentElement().getNodeName());
    	            NodeList listOfPersons = doc.getElementsByTagName("rechercheL:CV");
    	            int totalPersons = listOfPersons.getLength();
    	            System.out.println("Total no of people : " + totalPersons);
     
    	            for(int s=0; s<listOfPersons.getLength() ; s++){
     
     
    	                Node firstPersonNode = listOfPersons.item(s);
    	                if(firstPersonNode.getNodeType() == Node.ELEMENT_NODE){
     
     
    	                    Element firstPersonElement = (Element)firstPersonNode;
     
    	                    //-------
    	                    NodeList CINList = firstPersonElement.getElementsByTagName("rechercheL:CIN");
    	                    Element CINElement = (Element)CINList.item(0);
     
    	                    NodeList textCINList = CINElement.getChildNodes();
    	                    System.out.println("CIN : " + 
    	                           ((Node)textCINList.item(0)).getNodeValue().trim());
     
    	                    //-------
    	                    NodeList emailList = firstPersonElement.getElementsByTagName("rechercheL:email");
    	                    Element emailElement = (Element)emailList.item(0);
     
    	                    NodeList textEmailList = emailElement.getChildNodes();
    	                    System.out.println("email : " + 
    	                           ((Node)textEmailList.item(0)).getNodeValue().trim());
     
    	                    //---- parser la liste des langues
     
    	                    NodeList langueList = firstPersonElement.getElementsByTagName("rechercheL:Langue");
    	                    NodeList niveauList = firstPersonElement.getElementsByTagName("rechercheL:Niveau");
    	                    NodeList listOfPersons1 = doc.getElementsByTagName("rechercheL:langues");
    	                    int totalPersons1 = listOfPersons1.getLength();
    	                    System.out.println("Total no of langue : " + totalPersons1);
     
     
    	                    NodeList listOfPersons2 = doc.getElementsByTagName("rechercheL:Niveau");
    	                    int totalPersons2 = listOfPersons2.getLength();
    	                    System.out.println("total niveau: " + totalPersons2);
     
     
    	                    for(int j=0;j<totalPersons1;j++){
    	                    Element langueElement = (Element)langueList.item(j);
    	                    Element niveauElement = (Element)niveauList.item(j);
     
    	                    NodeList textLangueList = langueElement.getChildNodes();
    	                    NodeList textNiveauList = niveauElement.getChildNodes();
    	                   // NodeList tal = textAgeList.
    	                    System.out.println(" langue : " + 
    	                           ((Node)textLangueList.item(0)).getNodeValue().trim());
    	                    System.out.println("le niveau de la langue : " + 
    		                           ((Node)textNiveauList.item(0)).getNodeValue().trim());
     
    	                    //------
    	                    }
     
    	                }//end of if clause
     
     
    	            }//end of for loop with s var
     
     
    	        }catch (SAXParseException err) {
    	        System.out.println ("** Parsing error" + ", line " 
    	             + err.getLineNumber () + ", uri " + err.getSystemId ());
    	        System.out.println(" " + err.getMessage ());
     
    	        }catch (SAXException e) {
    	        Exception x = e.getException ();
    	        ((x == null) ? e : x).printStackTrace ();
     
    	        }catch (Throwable t) {
    	        t.printStackTrace ();
    	        }
    	        //System.exit (0);
     
    	    }//end of main
     
     
    }
    Merci astratee

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Tu ne nous donnes toujours pas ton vrai affichage, ça nous aiderait pourtant à te relire !

    Je vois dans ton code un vilain mélange de deux listes qui n'ont a priori rien à voir, la liste des éléments <rechercheL:Langue> et celle des éléments <rechercheL:langues>, avec parcours de l'une en fonction de la taille de l'autre... Et du coup non seulement tu n'obtiens pas le résultat attendu (voir les commentaires dans le code suivant pour comprendre le pourquoi de l'affichage) mais en plus c'est un nid à bug : avec une liste de langues vide, tu obtiendras une IndexOutOfBoundsException ou équivalent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    NodeList langueList = firstPersonElement.getElementsByTagName("rechercheL:Langue"); // liste à 2 éléments
    NodeList listOfPersons1 = doc.getElementsByTagName("rechercheL:langues"); // liste à 1 élément
    int totalPersons1 = listOfPersons1.getLength(); // totalPersons1 vaut 1
    System.out.println("Total no of langue : " + totalPersons1); // affichage de 1
     
    for (int j=0;j<totalPersons1;j++) { // pour j de 0 à 0... donc on ne passe qu'une seule fois dans la boucle
       Element langueElement = (Element)langueList.item(j);
       NodeList textLangueList = langueElement.getChildNodes;
       System.out.println("liste langue : " + ((Node)textLangueList.item(j)).getNodeValue().trim()); // on affiche une seule fois la langue sans jamais se préoccuper du niveau
    }

    La démarche la plus correcte serait à mon avis de :
    • récupérer la liste des éléments <rechercheL:langues>
    • parcourir cette liste, et pour chacun de ses éléments :
      • rechercher et afficher le fils <rechercheL:Langue>
      • rechercher et afficher le fils <rechercheL:Niveau>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lire un fichier XML avec des noeuds, enfants, etc
    Par thor76160 dans le forum C#
    Réponses: 23
    Dernier message: 04/09/2009, 16h14
  2. Créer et lire un fichier xml
    Par Bruno1905 dans le forum C++Builder
    Réponses: 14
    Dernier message: 13/06/2007, 12h11
  3. [DOM XML] Lire un fichier xml
    Par axel-erator dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 07/12/2005, 23h36
  4. lire un fichier xml
    Par stephanie5 dans le forum C++Builder
    Réponses: 6
    Dernier message: 18/11/2005, 17h34
  5. Comment lire un fichier XML ?
    Par jeromelef dans le forum Débuter
    Réponses: 6
    Dernier message: 29/06/2005, 16h52

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