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 :

Supprimer le contenu texte dans un document XML [JDOM]


Sujet :

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

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut Supprimer le contenu texte dans un document XML
    Salut à tous,
    j'ai besoin de votre aide dans le problème suivant:
    je veux supprimer le contenu text dans un document XML et garder seulement les éléments. Mais j'ai pas trouvé une instruction dans JDOM qui fait ça.
    Donc que vous proposez comme solution, et Merci d'avance.

  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
    Tu parcours ton arbre récursivement et à chaque fois que tu trouve un noeud de type texte ou cdata, tu le supprime.

    Il n'y a pas de fonction toute faire pour tout supprimer.

  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
    Citation Envoyé par tchize_ Voir le message
    Tu parcours ton arbre récursivement et à chaque fois que tu trouve un noeud de type texte ou cdata, tu le supprime.
    Attention quand même au piège de la ConcurrentModificationException.

    Il faut parcourir les nœuds fils avec un Iterator, et utiliser remove() sur cet Iterator. Utiliser detach() ou removeContent() a de bonnes chances de planter.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    Salut à tous,
    Merci monsieur tchize_ et monsieur thelvin pour vos réponses.
    j'ai écrit le code suivant:
    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
     
       static void textt(Element element)
    	{
    	   List contenu = element.getContent();
    	   Iterator i=contenu.iterator();
    	    while(i.hasNext())
    		{
    	           Object o=i.next();
    		   if(o instanceof Text)
    		     {
    			System.out.println("yes");   
    			i.remove();
    		     }
     
    		 if(element.getChildren().isEmpty()==false)
    		   {
    			List liste= element.getChildren();
    			Iterator it=liste.iterator();
    			while(it.hasNext())
    			 {
    			   Element fils= (Element)it.next();
    			   textt(fils);
         		         }
    		    }
       }
    normalement il marche bien, que pensez vous avant de mettre "résolu".

  5. #5
    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
    Que ton code ne traite pas un niveau sur deux, de part la deuxième boucle imbriquée il faut la retirer et passer directement l'élément qui n'est pas de type Text à une récursion de ttext, plutot que de ne passer que ses enfants.

  6. #6
    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
    Par ailleurs, il y a moyen de faire bien plus simple juste avec getDescendants(), et un Filter qui ne prend que les textes.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    Salut à tous,
    Ben merci beaucoup pour vos collaborations.
    Donc j'ai écrit le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    static void text(Element element)
       {
    	Iterator i=element.getDescendants();
    	while(i.hasNext())
    	   {
    	      Object o=i.next();
    	      if(o instanceof Text)
    		{
    		    System.out.println("yes");   
    		    i.remove();
    		}
                 }
       }
    Alors que pensez-vous dans ce code avant de mettre "résolu".

  8. #8
    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
    Il est bien, mais je persiste que c'était plus simple avec un Filter sur getDescendants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Iterator<Text> itr = element.getDescendants(Filters.text());
    while(itr.hasNext()) {
      itr.next();
      itr.remove();
    }
    La différence n'est plus énorme mais quand même, ça va un peu plus droit au but.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    Iterator<Text> itr = element.getDescendants(Filters.text());
    j'ai pas compris la récursivité Filters.text()?!

  10. #10
    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
    Normal, y en a pas.

    C'est getDescendants(), comme son nom et l'emploi que tu en as fait l'indiquent, qui parcourt le contenu récursivement.

    Le filtre n'est là que pour dire qu'on ne s'intéresse qu'aux Text et que l'Iterator n'a pas besoin de nous montrer le reste.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    ok merci

  12. #12
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    voici le nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    static void text(Element element){
    	Filter filter = new ContentFilter(ContentFilter.TEXT );
    	Iterator<Text> itr = element.getDescendants(filter);
    	while(itr.hasNext()) {
    	  itr.next();
    	  itr.remove();
    	}
    	}
    que pensez-vous je met "résolu"?

  13. #13
    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
    Tu sais, ça sert à rien de s'enfermer dans JDOM 1 si tu l'avais pas encore. C'est plus malin de commencer directemenr avec JDOM 2.

    Mais si vraiment tu y tiens, vérifie quand même si tu as pas besoin de gérer aussi les CDATA. (Voire les commentaires et les processing-instructions, au fond.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 88
    Par défaut
    merci monsieur thelvin pour ta réponse, et je veux vous informer que je suis vraiment débutante dans la programmation, java, jdom, documents XML... Donc excusez-moi, lorsque mes questions sont stupides.

    Concernant le code j'ai besoin seulement de "Text".

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

Discussions similaires

  1. Comment supprimer du texte dans un fichier XML
    Par sheira dans le forum Langage
    Réponses: 12
    Dernier message: 29/12/2010, 15h47
  2. Réponses: 4
    Dernier message: 09/05/2006, 11h33
  3. Sauver un TStream dans un document XML
    Par srvremi dans le forum Composants VCL
    Réponses: 4
    Dernier message: 07/10/2004, 13h17
  4. recherche dans un document xml via DOM
    Par ndoye_zaff dans le forum APIs
    Réponses: 5
    Dernier message: 11/06/2003, 14h44
  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