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

XML/XSL et SOAP Discussion :

[JAVA] Problème supression noeud d'un document XML


Sujet :

XML/XSL et SOAP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 7
    Points
    7
    Par défaut [JAVA] Problème supression noeud d'un document XML
    Bonjour, voilà mon problème:

    j'ai un document xml comme-ci:
    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
    <archives>
      <experience>
        <num>fiche1</num>
        <personne>
          <nom>Dupont</nom>
          <prenom>Jean</prenom>
        </personne>
      </experience>
      <experience>
        <num>fiche2</num>
        <personne>
          <nom>Smith</nom>
          <prenom>John</prenom>
        </personne>
      </experience>
    </archives>
    Je veux supprimer la fiche 1, et je n'arrive pas à le faire, voici 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
     
    Document document;
    SAXBuilder sxb = new SAXBuilder();
    try{
        document = sxb.build(new File("archives.xml");
        //L'on initialise un nouvel element racine avec l'element racine du document.
        Element racine = document.getRootElement();
     
        String element=("experience");
        //Dans un premier temps on liste toutes les expériences 
        List listExperience = racine.getChildren(element);
     
        Iterator i = listExperience.iterator();
     
        //On parcours la liste grâce à un iterator
        while(i.hasNext())
        {
            Element courant = (Element)i.next();
            if(courant.getChild("num")!=null)
            {
                   if(num.equals("fiche1")){
    	   courant.removeChild(element);
                   }
             }
         }
         Format format = Format.getCompactFormat().setEncoding("ISO-8859-1"); 
         XMLOutputter sortie = new XMLOutputter(format); 
        sortie.output(document, new FileOutputStream(new File("nouveau.xml")));
           }
           catch(Exception e){}
    Mais ça ne foctionne pas...ça ne me supprime pas la fiche 1....par contre si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    courant.removeChild("num");
    ça me supprimera le noeud num de la fiche 1....

    Comment faire pour supprimer le noeud experience de la fiche 1 et tous les noeuds enfants de experience pour cette fiche1????

    Merci de votre aide!!![/code]

  2. #2
    Membre habitué Avatar de Hoegaarden
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 362
    Points : 175
    Points
    175
    Par défaut Re: Problème supression noeud d'un document XML
    Citation Envoyé par vero59
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(num.equals("fiche1))
    Salut t as essayé en ajoutant le " apres fiche1

    ++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    oui oui c'est une erreur de frappe lors de l'écriture de mon message....

  4. #4
    Membre habitué

    Inscrit en
    Mai 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 60
    Points : 171
    Points
    171
    Par défaut
    Bonjour,

    je pense avoir trouvé l'erreur :

    Tu teste le fait que ta balise num soient egal à "fiche1" , hors ce n'est jamais le cas. Tu doit tester le "TextContent" de cette balise.

    A la place de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(num.equals("fiche1")){
          courant.removeChild(element);
                   }
    tu met donc ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(num.getTextContent().equals("fiche1")){
          courant.removeChild(element);
                   }
    Et en théorie ça devrait marcher

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    c'était encore une erreur de frappe, dans mon code j'ai bien écrit
    courant.getChild("num").getText().equals("fiche1") et ça rentre bien dans la boucle mais le removeChild(element) n'a aucun effet...

    par contre, si j'écrit removeChild("num") alors ça me supprime bien le noeud "num", sauf que je veux supprimer tout le noeud experience...

    Dois alors d'abord suprimer tous les noeuds enfants de experience, pou qu'il soit vide, puis supprimer le noeud expérience????

  6. #6
    Membre habitué

    Inscrit en
    Mai 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 60
    Points : 171
    Points
    171
    Par défaut
    ça y est , j'ai compris d'ou vien l'erreur ^^
    Tu demande a ton élement courant , en l'occurence <expérience> de faire un removeChild , literralement de retirer un de ses fils dans ce cas précis un fils qui s'appelle expérience.

    Hors il n'a pas de fils qui s'appelle expérience , puisque c'est lui même. Il ne fait donc rien.

    Je n'ai pas encore trouvé comment faire pour qu'il s'auto-detruise comme un grand, mais j'y travail, je te tien au courant

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    merci moi ça fait 2 jours que je me prends la tête....

    j'ai essayé avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    racine.removeChild(courant.getName());
    Mais ça n'a pas d'effet...ça sort carrément de mon while....


    Merci de ton aide

  8. #8
    Membre habitué

    Inscrit en
    Mai 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 60
    Points : 171
    Points
    171
    Par défaut
    Et si tu essayais avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.removeChild(courant)
    La ça cible directement le noeud , sans passer par son nom. Ta méthode posais probleme car il existe plusieurs noeuds qui s'appelle expérience.

    En théorie ça devrait marcher

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    heu......je ne pense pas que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.removeChild(courant)
    fonctionne car la méthode removeChild n'existe pas pour un objet de type document, alors je me suis dis que tu voulais dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    racine.removeChild(courant)
    sans passer par son nom, mais la méthode removeChild() prend en paramètre une String donc je suis obligée de passer par son nom... et on en revient au problème, lorsque j'écris ça, il sort carrément de mon while, et ne me génère pas mon document xml....

  10. #10
    Membre habitué

    Inscrit en
    Mai 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 60
    Points : 171
    Points
    171
    Par défaut
    La méthode existe , je l'ai sous les yeux ^^.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.removeChild(Node Child) Throws DOMException
    Sauf que tu n'a pas l'air d'utiliser le meme genre de document que moi

    J'ai pensé aussi a une autre solution qui pourrait te permettre d'arriver a tes fins. Certes c'est un peu du bidouillage mais bon ...

    Il te suffirait de modifier le nom du noeud expérience qui contient ton <num>fiche1</num>

    Tu pourrais alors utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    racine.removeChild("le nom que tu lui a donné");
    Encore une fois une méthode qui est accessible via l'instance du document

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.renameNode(... , ... , ...);
    Voici donc quelques pistes , j'espère qu'elles te sont utiles.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    j'utilise JDom et Sax....

Discussions similaires

  1. Problème de conception d'un document XML
    Par soso78 dans le forum VB.NET
    Réponses: 0
    Dernier message: 12/06/2009, 12h11
  2. Insérer qu'un noeud dans un document XML
    Par sliderman dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 08/01/2008, 17h57
  3. Accès aux noeuds d'un document XML
    Par Ashitaka dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/08/2007, 15h15
  4. [XSLT]Problème de transformation d'un document XML.
    Par JM_Cholet dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 16/01/2007, 13h29
  5. [JDOM] Noeuds d'un document XML
    Par kaninama dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 15/05/2006, 11h24

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