Modifier fichier xml en c#

Résolu
halimalili Messages postés 13 Date d'inscription samedi 29 janvier 2011 Statut Membre Dernière intervention 22 janvier 2013 - 8 mars 2011 à 21:41
halimalili Messages postés 13 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

5 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
9 mars 2011 à 11:02
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.
3
halimalili Messages postés 13 Date d'inscription samedi 29 janvier 2011 Statut Membre Dernière intervention 22 janvier 2013
9 mars 2011 à 19:25
Merciiiiiiiii :))
ca marche bien maint
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
9 mars 2011 à 20:02
Je veux pas être tatillon, mais pourrais-tu mettre le topic comme "résolu" stp ? ^^
0
halimalili Messages postés 13 Date d'inscription samedi 29 janvier 2011 Statut Membre Dernière intervention 22 janvier 2013
9 mars 2011 à 20:16
hhh!! c bon :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
halimalili Messages postés 13 Date d'inscription samedi 29 janvier 2011 Statut Membre Dernière intervention 22 janvier 2013
9 mars 2011 à 21:29
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> 

**********
0
Rejoignez-nous