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

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Points : 7
    Points
    7
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    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
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Points : 7
    Points
    7
    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
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Points : 7
    Points
    7
    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 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    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.)

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Points : 7
    Points
    7
    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

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Une feuille ça veut rien dire.
    On en est plus à rechercher quel est le but, je sais lire, merci. Mon algo, il implémente correctement ce but, oui ou non ?

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut [java] récuperation de feuilles XML
    TON ALGO????????????????

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    vérifier si un élément contient un seul enfant et que cet enfant est un nœud texte.

  10. #10
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut [JDOM] recuperation de feuilles XML
    Monsieur thelvin , c'est exactement ce que j'ai fais des le debut (le code le montre bien), les espaces vides rajoutés dans ma liste sont la conséquence des identations. et d'apres ep31: les identations sont considérées comme des TEXT_NODE. il a raison.. mon probleme est resolu quand j'ai supprimé ces identations.merci

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Oui, pardon, j'avais oublié que tu étais prêt à ne pas gérer les indentations.

    J'encourage pas à ça, d'autant plus que je ne vois pas ce qu'il y a de compliqué, mais je suppose que je n'avais pas à être sec.

+ 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