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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

+ 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