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 [DOM]


Sujet :

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

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Par défaut Parser un fichier xml
    Bonjour,
    Je galère depuis ce matin pour parser mon fichier xml que voici :
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <root lang="fr">
    <Personne>
    <Document type="A">
    <nom>nom</nom>
    <Prenom>prenom</Prenom>
    </Document>
     
     
    <Document type="B">
    <nom>nom</nom>
    <Prenom>prenom</Prenom>
    </Document>
    <Info>info</Info>
    </Personne>
     
    <Personne>
    <Document type="A">
    <nom>nom</nom>
    <Prenom>prenom</Prenom>
    </Document>
     
    <Document type="C">
    <nom>nom</nom>
    <Prenom>prenom</Prenom>
    </Document>
    <Info>info</Info>
    </Personne>
    </root>
    En gros, j'ai des personnes qui possèdent des documents.
    Je veux pour chaque personne extraire ses documents ainsi que les valeurs de chaque document.
    Donc il me faut une boucle sur les personnes et pour chaque personne faire une boucle sur ses documents.

    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
     
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
     
    Document doc = db.parse(fichier);			
    Element root = doc.getDocumentElement();
     
    NodeList nodeList = root.getElementsByTagName("Personne");
     
    NodeList nl = root.getElementsByTagName("Document");
     
    if(nl != null && nl.getLength() > 0) {
    	for(int i = 0 ; i < nl.getLength();i++) {
     
        Element el = (Element)nl.item(i);
        String name1 = getTextValue(el,"nom");
        String name2 = getTextValue(el,"prenom");	
     
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private String getTextValue(Element ele, String tagName) {
    		String textVal = null;
    	NodeList nl = ele.getElementsByTagName(tagName);
    	if(nl != null && nl.getLength() > 0) {
    		Element el = (Element)nl.item(0);
    		textVal = el.getFirstChild().getNodeValue();
    	}
     
    	return textVal;
    }
    En gros, je n'arrive pas à faire le lien entre personne et documents. Sachant qu'une personne à d'autres infos en plus que ses documents.
    Merci pour votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Je vois que tu fais un NodeList nl = root.getElementsByTagName("Document");
    Pour récupérer tes "Document", et en effet tu ne sais pas à qui il appartient..

    Tu as une boucle qui parcours tes "Personne".
    Je pense que tu devrais récupérer les "Document" lorsque tu es dans cette boucle.

    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
     
    NodeList nodeList = root.getElementsByTagName("Personne");
     
    if(nl != null && nl.getLength() > 0) {
    	for(int i = 0 ; i < nl.getLength();i++) {
     
        Element el = (Element)nl.item(i);
        String name1 = getTextValue(el,"nom");
        String name2 = getTextValue(el,"prenom");	
     
        NodeList nl = el.getElementsByTagName("Document");
        // Et là tu fais la boucle pour les documents
        // Les documents que tu récupèrent ici sont ceux de la Personne en cours.
    	}
    }

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Pour une telle chose, je recommande chaleureusement d'apprendre à utiliser JDOM, et sa facilité d'utiliser les xPath.

    Ça fait du code beaucoup plus simple, court, et donc facile à maintenir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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