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 :

Parcours d'un fichier xml [DOM]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut Parcours d'un fichier xml
    voici une fonction que j'utilise pour parcourir un xml, au début elle était récursive mais pour les tests j'ai enlevé la récursivité:
    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
    public void parcourir(Node e) {
    		System.out.println("parcourir");
     
    		for (Node child = e.getFirstChild(); child != null; child = child
    		.getNextSibling()) {
    			System.out.println("récursivité: " +child.getNodeName());
     
    		if (child.getNodeType() == Node.ELEMENT_NODE) {
    			System.out.println("e.getNodeType() == Node.ELEMENT_NODE :" + child.getNodeName()+" valeur: "+ child.getNodeValue());
    			if (child.getNodeName().equals("CentreRecherche")) {
    				CentreRecherche cr = new CentreRecherche();
    				System.out.println("e.getNodeName().equals(\"CentreRecherche\")");
    				for (Node node =child.getFirstChild(); node != null; node.getNextSibling()) {
    					System.out.println("CENTRE DE RECHERCHE : " +node.getNodeName() +" valeur: "+ node.getNodeValue());
     
    					if (node.getNodeName().equals("Personne") ){
    						System.out.println("e.getNodeName().equals(\"Personne\") :" +node.getNodeName());
    						Personne personne = new Personne();
    						for (Node nodePer = node.getFirstChild(); nodePer != null; nodePer
    						.getNextSibling()) {System.out.println("parcour de la liste des personnes:" +node.getNodeName());
     
    						if (nodePer.getNodeName().equals("nom")) {
    							System.out.println("e.getNodeName().equals(\"nom\"):" +node.getNodeName());
    							personne.setNom(nodePer.getNodeValue());
    						} else if (nodePer.getNodeName() == "prenom") {
    							System.out.println("e.getNodeName().equals(\"prenom\"):" +node.getNodeName());
    							personne.setPrenom(nodePer.getNodeValue());
    						}
    						}
    						cr.addPersonne(personne);
    					}else
    						if (node.getNodeName().equals("libelle")) {
    							System.out.println("e.getNodeName().equals(\"libellé\"):" +node.getNodeName());
    							cr.setLibelle(node.getNodeValue());
    						} else if (node.getNodeName().equals("latitude")) {
    							System.out.println("e.getNodeName().equals(\"latitude\"):" +node.getNodeName());
    							cr.setLat(Float.parseFloat(node.getNodeValue()));
    						} else if (node.getNodeName().equals("longitude")) {
    							System.out.println("e.getNodeName().equals(\"longitude\"):" +node.getNodeName());
    							cr.setLng(Float.parseFloat(node.getNodeValue()));
    						}
     
    					// fermuture du for
    				}
    				System.out.println("j'ajoute le tt dans cr");
    				this.cr.add(cr);
     
     
    			}
     
    		}
     
    		}
    		System.out.println("je sors de parcourir");
    	}
    l'xml est sous cette forme la:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <CentreRecherches> 
        <CentreRecherche> 
            <libelle>-</libelle> 
            <latitude>0</latitude> 
            <longitude>0</longitude> 
            <Personne> 
                <nom>yoan</nom> 
                <prenom>Gia</prenom> 
            </Personne> 
    </CentreRecherches>

    et le résultat obtenu est anormal, je ne parviens pas à le comprendre je vous donne un petit aperçu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    parcourir
    récursivité: #text
    récursivité: CentreRecherche
    e.getNodeType() == Node.ELEMENT_NODE :CentreRecherche valeur: null
    e.getNodeName().equals("CentreRecherche")
    CENTRE DE RECHERCHE : #text valeur:         
    CENTRE DE RECHERCHE : #text valeur:         
    CENTRE DE RECHERCHE : #text valeur: (à l'infini)
    déja je comprends pas pourquoi le type CENTRE DE RECHERCHE : #text alors que c'est un noeud et moi j'ai demandé l'affichage du nom vous voyez... Aidez moi svp...

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    parce qu'il y a du texte (même vide) entre chaque noeud:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <CentreRecherches>#text
        <CentreRecherche>#text 
            <libelle>-</libelle>#text 
            <latitude>0</latitude>#text 
            <longitude>0</longitude>#text 
            <Personne>#text 
                <nom>yoan</nom>#text 
                <prenom>Gia</prenom>#text 
            </Personne>#text 
    </CentreRecherches>
    Edit: et pour l'infini, ca viens d'ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (Node node =child.getFirstChild(); node != null; node.getNextSibling())
    Il manque une affectation

  3. #3
    Membre éclairé Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Par défaut
    Oui jai réglé le probleme de l'affectation mais la il me renvoie toujours null quand je fais par exemple node.getNodeValue(); alors qu'aucune de mes balise n'est vide, merci beaucoup de m'aider...

  4. #4
    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
    Faut lire la JavaDoc.

    getNodeValue() renvoie toujours null, sauf pour les nœuds texte (dont la valeur est le texte qu'ils représentent) et les attributs (dont la valeur... Est leur valeur.)

    Pour obtenir le contenu d'un Element, il faut itérer sur ses enfants et extraire le contenu de chacun d'eux. Ici tes éléments ont un seul enfant, un nœud texte. Il faut donc récupérer ce nœud texte et c'est là-dessus qu'il faut appeler getNodeValue().

    L'une des nombreuses raisons de ne pas utiliser cette merde de DOM standard en Java, et d'utiliser JDOM à la place.
    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. [WD10] Parcours d'un fichier XML
    Par nuFox dans le forum WinDev
    Réponses: 2
    Dernier message: 13/04/2009, 11h40
  2. [XSLT] parcours d'un fichier XML
    Par kakid dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 17/05/2008, 18h14
  3. Parcours d'un fichier XML
    Par Amiba dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/09/2007, 14h31
  4. [DOM] Besoin d'optimiser le parcours d'un fichier XML
    Par stardeus dans le forum Format d'échange (XML, JSON...)
    Réponses: 19
    Dernier message: 08/04/2007, 17h04

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