Modifier fichier xml en c# [Résolu]

Messages postés
15
Date d'inscription
samedi 29 janvier 2011
Statut
Membre
Dernière intervention
22 janvier 2013
- - Dernière réponse : halimalili
Messages postés
15
Date d'inscription
samedi 29 janvier 2011
Statut
Membre
Dernière intervention
22 janvier 2013
- 9 mars 2011 à 21:29
mon probléme c que la modification dans ma base xml se fait sur tous les balises et pas le protocol spcifier
Voici la structure:
*******


















*******
Voici mon code:
*******
private void modifier_Click(object sender, EventArgs e)
{

try
{ XmlDocument doc = new XmlDocument();
doc.Load("C:/net.xml");

XmlNodeList nodeList = doc.SelectNodes("//protocol");
foreach (XmlNode node in nodeList)

//namp.text => c le nom sasie dans le champ nom du protocol
node.Attributes["name"].Value = namp.Text;

foreach (XmlNode node in nodeList)
doc.Save("C:/net.xml");
MessageBox.Show("modification effectué");
}
catch (XmlException xmlEx)
{
Console.WriteLine("{0}", xmlEx.Message);
}
catch (Exception ex)
{
Console.WriteLine("{0}", ex.Message);
}
}
******
si c possible de me corriger le code pour que la modification se fait seulement sur lr protocol saisie,Merci
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
3
Merci
Salut,

il y a quelques incohérences/oublis dans ton code :
- double foreach identiques,
- le 2ème foreach sauvegarde ton fichier (contenant tous tes noeuds) pour chaque noeud protocol rencontré (ça n'a pas de sens),
- tu veux modifier un protocole en particulier et tu nous indiques que le nouveau nom se trouve dans namp.Text, mais où se trouve l'ancien nom ? Sans celui-ci comment savoir quel noeud modifier en particulier ?

Ton code devrait ressembler à ça, en version aérée :
[..]
string oldname = nampold.Text;
string newname = namp.Text;
foreach (XmlNode node in nodeList) {
string currentname = node.Attributes["name"].Value;
if (currentname == oldname) {
node.Attributes["name"].Value = newname;
// break;
}
}
doc.Save("C:/net.xml");


si le nom de protocole est unique, tu peux même rajouter un break dans le bloc if, pour que le parcours s'arrête. Par contre cela sous-entend que tu maintiens cette unicité, et donc que tu vérifies que la nouvelle valeur saisie n'existe pas déjà dans ton XML.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_jopop
Messages postés
15
Date d'inscription
samedi 29 janvier 2011
Statut
Membre
Dernière intervention
22 janvier 2013
0
Merci
Merciiiiiiiii :))
ca marche bien maint
Commenter la réponse de halimalili
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
0
Merci
Je veux pas être tatillon, mais pourrais-tu mettre le topic comme "résolu" stp ? ^^
Commenter la réponse de cs_jopop
Messages postés
15
Date d'inscription
samedi 29 janvier 2011
Statut
Membre
Dernière intervention
22 janvier 2013
0
Merci
hhh!! c bon :)
Commenter la réponse de halimalili
Messages postés
15
Date d'inscription
samedi 29 janvier 2011
Statut
Membre
Dernière intervention
22 janvier 2013
0
Merci
je veux trier mon fichier xml selon le 'name' du protocol;
voici sa structure, même structure que l'autre:
*********
<?xml version="1.0" encoding="utf-8"?> 
<netpdl> 
 
<format> 
</format> 

 
 
<format> 
</format> 

 
 
<format> 
</format> 

 
</netpdl> 

**********
Commenter la réponse de halimalili