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 :

[C#] RemoveChild "Le noeud à supprimer n'est pas un enfant de ce noeud"


Sujet :

XML/XSL et SOAP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Points : 25
    Points
    25
    Par défaut [C#] RemoveChild "Le noeud à supprimer n'est pas un enfant de ce noeud"
    Bonjour à tous !

    Soit un .xml tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Utilisateurs>
       <Admins>
             <admin mdp="3">un admin</admin>
             <admin mdp="6">un autre</admin>
       </Admins>
    </Utilisateurs>
    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
    try{
    	doc = new XmlDocument();
    	doc.Load(xmldoc);
    	XmlNode user;
    	XmlElement root = doc.DocumentElement;
    	user=root.SelectSingleNode("/Utilisateurs/Admins/admin[@mdp='3']");
     
    	root.RemoveChild(user);
    	doc.Save(xmldoc); 
    	}
    	catch(System.Exception ex)
    	{
    	MessageBox.Show(ex.Message+ex.StackTrace);
     
    	}
    Je me prend une erreur "Le noeud à supprimer n'est pas un enfant de ce noeud" à la ligne du RemoveChild
    Pourquoi ?! Comment ?!

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    parce que le noeud que tu souhaites supprimer est enfant de /Utilisateurs/Admin, pas de /
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Hum... Merci à toi de m'expliquer l'erreur en français...
    Mais çà ne m'aide pas vraiment, donc je reformule ma question :

    Comment définir que le noeud à supprimer est enfant de /Utilisateurs/Admin ????

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Il l'est, c'est un fait, c'est simplement qu'au lieu de l'élément racine (que tu as avec ta variable root), il faut que tu le supprime à partir de l'élément Admin...

    exemple (en reprenant ton 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
    try{
    	doc = new XmlDocument();
    	doc.Load(xmldoc);
    	XmlNode parent, user;
    	XmlElement root = doc.DocumentElement;
            parent = root.SelectSingleNode("/Utilisateurs/Admins");
    	user=root.SelectSingleNode("/Utilisateurs/Admins/admin[@mdp='3']");
     
    	parent.RemoveChild(user);
    	doc.Save(xmldoc); 
    	}
    	catch(System.Exception ex)
    	{
    	MessageBox.Show(ex.Message+ex.StackTrace);
     
    	}
    il est peut-être même possible de faire un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user.parent.RemoveChild(user);
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    OK !!!! La 2eme solution fonctionne également sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user.ParentNode.RemoveChild(user);
    Merci à toi, une fois de +

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

Discussions similaires

  1. XSLT retrouver des noeuds qui n'ont pas un enfant d'un certain type.
    Par Goldenkiller dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 25/08/2008, 11h25
  2. [array] supprimer un élément qui n'est pas le dernier
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/04/2008, 20h41
  3. Sauriez-vous me dire comment la récursivité est utilisée ici (AB comptage des noeuds)
    Par beegees dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 20/03/2008, 22h33
  4. [RegEx] Supprimer tout ce qui n'est pas un mot
    Par Astorz dans le forum Langage
    Réponses: 5
    Dernier message: 08/02/2008, 03h24

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