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 :

Suppression problématique [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 expérimenté Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Par défaut Suppression problématique
    Bonjour,

    j'ai actuellement (notamment) un fichier de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Utilisateur>
    <Information>
    <Name>user</Name>
    <Login>login</Login>
    <Ip>127.0.0.1</Ip>
    </Information>
    </Utilisateur>
    La modification, l'ajout se passent sans problèmes via JDOM mais j'ai des problèmes pour la suppression.

    Je sais qu'il y a déjà des topics à ce sujet, et une partie dans la faq mais le problème persiste.

    Imaginons que je veux supprimer un noeud <Information></Information> complet lorsque Name=user par exemple.

    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
        public void supprElement(String element, User u, String f) {
            //REQUIRES: u non-NULL
            //MODIFIES: this
            //EFFECTS:  Supprime la balise "element" correspondant a "u.login"
     
            documentRoot_ = super.getDocumentRoot();
            List listEtudiant = documentRoot_.getChildren("Information");
            Iterator i = listEtudiant.iterator();
     
            while (i.hasNext()) {
                Element courant = (Element) i.next();
                if(courant.getChild(element)!=null && courant.getChild("Name")!=null) {
                if (courant.getChild("Name").getValue().equals(u.getName())) {
                    courant.removeContent();  
                }
                }
            }            
            recordFile(f);
        }
    Si j'exécute ce code il reste ceci à la fin :


    <?xml version="1.0" encoding="UTF-8"?>
    <Utilisateur>
    <Information/>
    </Utilisateur>

    pourquoi ce "<Information/>" (qui fait tout planter...)


    j'ai essayé aussi en supprimant élément par élément et même avec un Filter, même problème...


    une idée?


    merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 104
    Par défaut
    Bonjour,
    L'instruction "courant.removeContent();" supprime le contenu de l'élément courant qui est un élément <information>.
    Il faudrait supprimer l'élement <information> lui-même et non son contenu.

  3. #3
    Membre expérimenté Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Par défaut
    removeContent comme son nom l'indique supprime le contenu d'un élément donc tout les éléments fils mais pas l'élément en question.
    Donc essaies de le supprimer de son parent avec removeChild ou removeChildren.
    Excuses moi de ne pas être si clair c'est parce que je n'ai jamais manipuler jdom d'habitude je me contente des packages de java (javax.xml) mais l'algo reste le même.
    En plus ce que tu essaies de faire est très facile avec xpath et plus pratique.

  4. #4
    Membre expérimenté Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Par défaut
    En fait à la base je n'utilisais que les removeChild() et removeChildren() mais le problème restait le même...

    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
        public void supprElement(String element, User u, String f) {
            //REQUIRES: u non-NULL
            //MODIFIES: this
            //EFFECTS:  Supprime la balise "element" correspondant a "u.login"
     
            documentRoot_ = super.getDocumentRoot();
            List listEtudiant = documentRoot_.getChildren("Information");
            Iterator i = listEtudiant.iterator();
     
            while (i.hasNext()) {
                Element courant = (Element) i.next();
                if(courant.getChild(element)!=null && courant.getChild("Name")!=null) {
                if (courant.getChild("Name").getValue().equals(u.getName())) {
                    courant.removeChild("Name");
                    courant.removeChild("Login");
                    courant.removeChild("Ip");
                }
                }
            }            
            documentRoot_.removeChild("Information");
            recordFile(f);
        }
    là j'ai le problème cité ua début

    ou encore

    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
        public void supprElement(String element, User u, String f) {
            //REQUIRES: u non-NULL
            //MODIFIES: this
            //EFFECTS:  Supprime la balise "element" correspondant a "u.login"
     
            documentRoot_ = super.getDocumentRoot();
            List listEtudiant = documentRoot_.getChildren("Information");
            Iterator i = listEtudiant.iterator();
     
            while (i.hasNext()) {
                Element courant = (Element) i.next();
                if(courant.getChild(element)!=null && courant.getChild("Name")!=null) {
                if (courant.getChild("Name").getValue().equals(u.getName())) {
                    documentRoot_.removeChild("Information");
                }
                }
            }            
            recordFile(f);
        }
    là j'ai une exception de concurrence de modification


    merci de vos réponses

  5. #5
    Membre expérimenté Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Par défaut
    et si tu le supprimais de la list listEtudiant .

  6. #6
    Membre expérimenté Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    java.util.ConcurrentModificationException
    	at org.jdom.ContentList$FilterListIterator.checkConcurrentModification(ContentList.java:940)
    	at org.jdom.ContentList$FilterListIterator.nextIndex(ContentList.java:829)
    	at org.jdom.ContentList$FilterListIterator.hasNext(ContentList.java:785)
    	at PFIL.AdressBook.XmlEditor.supprElement(XmlEditor.java:34)
    	at PFIL.AdressBook.UserSharingModel.delUser(UserSharingModel.java:61)
    	at PFIL.AdressBook.DelUserModel.delUser(DelUserModel.java:19)
    	at PFIL.AdressBook.DelUserController$1.actionPerformed(DelUserController.java:36)
    en faisait listEtudiant.remove(courant);

    je comprends pas trop d'ailleurs, je ne vois pas en quoi j'ai des problèmes de modifications simultanées.

  7. #7
    Membre expérimenté Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Par défaut
    Pourrait tu nous donner la classe de la methode supprime pour faire un petit test.

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

Discussions similaires

  1. Suppression des doublons problématique
    Par crahier dans le forum MS SQL Server
    Réponses: 27
    Dernier message: 22/08/2012, 17h08
  2. [DOM] suppression d'un noeud fils xml en JAVA
    Par alexandre54 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 20/03/2003, 09h44
  3. Suppression de la contrainte unique
    Par mika dans le forum SQL
    Réponses: 3
    Dernier message: 20/02/2003, 17h56
  4. [CR] suppression du bas de page
    Par grosjej dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 10/09/2002, 08h58
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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