Modifier fichier xml en c# [Résolu]

Messages postés
15
Date d'inscription
samedi 29 janvier 2011
Dernière intervention
22 janvier 2013
- 8 mars 2011 à 21:41 - Dernière réponse :
Messages postés
15
Date d'inscription
samedi 29 janvier 2011
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 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 9 mars 2011 à 11:02
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.

Merci cs_jopop 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_jopop
Messages postés
15
Date d'inscription
samedi 29 janvier 2011
Dernière intervention
22 janvier 2013
- 9 mars 2011 à 19:25
0
Merci
Merciiiiiiiii :))
ca marche bien maint
Commenter la réponse de halimalili
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Dernière intervention
1 août 2013
- 9 mars 2011 à 20:02
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
Dernière intervention
22 janvier 2013
- 9 mars 2011 à 20:16
0
Merci
hhh!! c bon :)
Commenter la réponse de halimalili
Messages postés
15
Date d'inscription
samedi 29 janvier 2011
Dernière intervention
22 janvier 2013
- 9 mars 2011 à 21:29
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.