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 :

Récupération des feuilles dans un document XML [JDOM]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Par défaut Récupération des feuilles dans un document XML
    Bonjour a tous,
    je suis debutante en java et je programme une petite application sur parcours d'un document XML avec l API JDOM mais je rencontre un probleme dont je trouve ni la cause ni la solution... alors sans tarder je vous exlique:
    lors de parcours du fichier XML, le code va sauvegarder toutes les balises dans une NodeList et a partir de la chaque Node je le mettrai dans une autre liste et je vais acceder a son fils et tester sur le type de ce dernier, si c'est un TEXT_NODE il me la rajoute dans la 2eme liste .. ca marche mais le probleme c'est que quand le fils d'une balise est une autre balise il me la considere comme un TEXT_NODE alors quelle est un ELEMENT_NODE ... mais son getWholeText() est vide donc il me rajoute ce blanc dans la 2eme liste ce qui m'arrange pas du tout
    Prière de m aider

    voila mon 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
    File file = new File("C:\\Exercice2.xml"); 
    	    	  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    	    	  DocumentBuilder db = dbf.newDocumentBuilder(); 
    	    	  Document doc = db.parse(file); 
     
    	    	  doc.getDocumentElement ().normalize (); 
    	    	  System.out.println ("la racine est " + 
    	    	  doc.getDocumentElement().getNodeName()); 
     
     
    	    	  NodeList listOfnds = doc.getElementsByTagName("*"); 
    	    	  int compteur = listOfnds.getLength(); 
    	    	  System.out.println("Total des balises: " + compteur); 
     
    	    	for(int o=0;o < compteur; o++)
    				{
    	    		  Node rrr= listOfnds.item(o);
    	    	      String fff = rrr.getNodeName();
    	    		  al.add(fff);
    	    		  Node ttt = rrr.getFirstChild();
    	    		  short type = ttt.getNodeType();
    	    	//	  System.out.println("type "+ type); type =3!!!
    	                 if(type == TEXT_NODE)
    	                   {
    	            	    String ddd = ((Text) ttt).getWholeText();
    		                al.add(ddd); 
    	                   }
    	            }
     // la boucle for suivante n'est que pour afficher ce qu il y a dans la liste al --
     
    	    	for(int u=0; u < al.size(); u++)
    			{
    				System.out.println("mot num "+ u + " = "+ al.get(u));
    			}
    Exemple avec ce fichier XML:

    Code XML : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <personnes>
       <etudiant>
          <nom>CynO</nom>
          <prenoms>
             <prenom>Nicolas</prenom>
             <prenom>Laurent</prenom>     
          </prenoms>
       </etudiant>
       <etudiant classe="P1">
          <nom>Superwoman</nom>
       </etudiant>
       <etudiant classe="P1">
          <nom>Don Corleone</nom>
       </etudiant>
    </personnes>
    le resultat est
    la racine est personnes
    Total des balises: 10
    mot num 0 = personnes
    mot num 1 =

    mot num 2 = etudiant
    mot num 3 =

    mot num 4 = nom
    mot num 5 = CynO
    mot num 6 = prenoms
    mot num 7 =

    mot num 8 = prenom
    mot num 9 = Nicolas
    mot num 10 = prenom
    mot num 11 = Laurent
    mot num 12 = etudiant
    mot num 13 =

    mot num 14 = nom
    mot num 15 = Superwoman
    mot num 16 = etudiant
    mot num 17 =

    mot num 18 = nom
    mot num 19 = Don Corleone

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par défaut
    Les indentations sont considérées comme des TEXT_NODE.
    Afin de les ignorer il faudrait comparer les premier fils noeud au dernier.
    S'ils sont identiques, cela signifie qu'on a bien un TEXT_NODE étant donné qu'il n'y a pas de fils autre que le TEXT_NODE.

    Il faudrait je pense un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    				  Node nextelement = rrr.getLastChild();
    		           if (nextelement == ttt)
    à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	                 if(type == TEXT_NODE)

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Par défaut [JDOM] Récupération des feuilles dans un document XML
    Salut ep31;
    Merci pour l idée; elle est astucieuse; mais je dois impliquer l'instruction getNodeType() ; un noeud peut avoir un seul fils qui est au meme temps le FirstChild et le LastChild mais qui n'est pas un TEXT_NODE...

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Par défaut [JDOM] Récupération des feuilles dans un document XML
    effectivement, ep31 vous avez eu raison, le probleme était la conséquence des identations ... il a juste fallu supprimer les espaces entre les balises dans le document XML pour que ca marche... merci encore, sans vous jaurai pas trouvé.:

  5. #5
    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
    Citation Envoyé par imenblue Voir le message
    effectivement, ep31 vous avez eu raison, le probleme était la conséquence des identations ... il a juste fallu supprimer les espaces entre les balises dans le document XML pour que ca marche... merci encore, sans vous jaurai pas trouvé.:
    Ben oui, mais... C'est un peu dommage de cesser de marcher dès que le doc est bien indenté.
    Je vois pas trop le problème à vérifier si un élément contient un seul enfant et que cet enfant est un nœud texte. (Ce serait un peu plus facile avec JDOM, d'ailleurs. Un peu.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Par défaut [JDOM]recuperation feuille XML
    salut thelvin,
    l'interet n'est pas de tester si un noeud a un seul fils mais le but est de tester si le noeud actuel (qui est une balise) a une feuille comme fils ou bien une autre balise

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/05/2014, 15h30
  2. objet pour stocker la liste des noeuds dans un document xml
    Par nancy maman dans le forum Général Python
    Réponses: 3
    Dernier message: 29/08/2011, 16h28
  3. [DOM XML] Récupération des attributs dans un flux xml
    Par opeo dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 11/04/2007, 17h35
  4. Réponses: 4
    Dernier message: 09/05/2006, 11h33
  5. Stocker du texte mis en forme dans un document XML
    Par ovh dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 13/02/2003, 10h23

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