XML effacer un noeud grace a la valeur de son attribut

Résolu
Signaler
Messages postés
51
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
25 août 2006
-
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011
-
Bonjour,

j'ai un petit probleme de comprehension au niveau de la supression d'un noeud XML .
J'enregistre des conversation dans un fichier XML et je souhaiterais pouvoir les effacer par date.

<root>
<Conversation date="03/01/2006 16:08:10">
<Texte> blablalbaba </Texte>
</Conversation>
<Conversation date="03/01/2006 16:08:10">
<Texte> blablalbaba</Texte>
</Conversation>
</root>


Voila le code que j'ai fait:

xmldoc.Load(file); // je load mon fichier XML
XmlNodeList nodeList = xmldoc.SelectNodes("//Conversation");
//je met dans une nodelist tout les noeud de ma conversation

//boucle pour lire chaque noeud
foreach(XmlNode nd in nodeList){
//Je veux effacer le node dont l'attribut date= "03/01/2006 16:08:10 "
if (nd.attribute.equal( date= "03/01/2006 16:08:10 ") //bon ça existe pas :(
{
//nd.removeall()

}
}


donc le probleme c'est que j'arrive pas a trouver via le Xmlnode nd comment le
supprimer le noeud grace a l'attribut

J'espere que vous m'avez compris merci de votre aide

AG

9 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Décidément j'ai du mal avec ma requête aujourd'hui !!!
XmlNodeList nodeList = xmldoc.SelectNodes("//Conversation[@date='03/01/2006 16:08:10' ] ");

Exemple de code :
XmlNodeList nodeList = xmldoc.SelectNodes("//Conversation[@date='03/01/2006 16:08:10']");
foreach ( XmlNode node in nodeList )
{
node.ParentNode.RemoveChild(node);
}

/*
coq
MVP Visual C#
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Salut,

Tu peux directement sélectionner les noeuds à supprimer dans ta requête XPath :
XmlNodeList nodeList = xmldoc.SelectNodes("//Conversation[date=='03/01/2006 16:08:10'");

/*
coq
MVP Visual C#
*/
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

J'ai pas testé mais je le vois bien comme ceci :

if (nd.attribute.equal( date= "03/01/2006 16:08:10 "))
{
nd.ParentNode.RemoveChild(nd);
}

Poppyto http://www.poppyto.net LE site pour les bassistes
http://blogs.developpeur.org/Poppyto Mon Blog sur C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Oups, un '=' en trop ^^
XmlNodeList nodeList = xmldoc.SelectNodes("//Conversation[date='03/01/2006 16:08:10'");

/*
coq
MVP Visual C#
*/
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

Ca a l'air bon cette fois . Soulignons à agarcia_01qu'on ne peut détruire un noeud qu'à partir de son noeud parent (ParentNode), autrement ça reviendrais à du suicide de noeud

Poppyto http://www.poppyto.net LE site pour les bassistes
http://blogs.developpeur.org/Poppyto Mon Blog sur C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
node.DoSuicide();
ou
node.DoHarakiri();

ça le ferais :p

/*
coq
MVP Visual C#
*/
Messages postés
51
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
25 août 2006

Merci ça marche parfaitement le coq !!!!

Je peux continuer mon petit projet !!!
Messages postés
51
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
25 août 2006

c clair c'est ce que je me suis dit apres avoir vu le code de coq.
Le fils ne peux pas ce taper un suicide comme ça.Seul les parents le font !

Heureusement que dnas la realité aucun parent tue ses enfants .... enfin a part quelques exeption pres ... :(

Encore merci
Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

>coq

héhé node.TuSors(); c'est pas mal aussi

>agarcia_01

N'oublie pas d'accepter la bonne réponse pour ceux qui passeraient plus tard

Poppyto http://www.poppyto.net LE site pour les bassistes
http://blogs.developpeur.org/Poppyto Mon Blog sur C#