Linq to xml & la manipulation de données en xml avec une application winform

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 733 fois - Téléchargée 17 fois

Contenu du snippet

Afin de manipuler des données à l'aide d'XML et de supprimer et ajouter dans votre fichier XML à votre guise rien de tel que d'utiliser Linq to XML avec le framework .NET 3.5
C'est tout simplement génial...adieux le vieux code écrit pour manipuler du XML, ouuf.

<!-- Voici la structure du fichier XML, j'ai mis que 2 noeuds mais peu importe ... -->
<?xml version="1.0" encoding="utf-8" ?>
<racine_perso>

<noeud_perso noeud_persoId="1">
<nom_noeud_perso>INT</nom_noeud_perso>
</noeud_perso>

<noeud_perso noeud_persoId="2">
<nom_noeud_perso>ANU</nom_noeud_perso>
</noeud_perso>

</racine_perso>

Source / Exemple :


//code .cs, il faut bien sûr ajouter "using System.Xml" et using "System.Xml.Linq"

XmlDocument docXML = new XmlDocument();
            docXML.Load(Application.StartupPath + @"\nomFichier.xml");
            //On récupere le flux XML depuis le fichier XML
            XElement docXMLFromLinq = XElement.Load(Application.StartupPath + @"\nomFichier.xml");
            XmlNodeList nodes = docXML.SelectNodes("/racine/noeud_perso");                                   
            //Utilisation de Linq to XML
            //le fichier XML
            
            int iMaxNodeId = 0;
            //docXMLFromLinq.Element("") 
            foreach (var id in docXMLFromLinq.Elements("noeud_perso")) 
            {
                int iIdNode = System.Convert.ToInt32((string)id.Attribute("noeud_persoId"));
                iMaxNodeId = Math.Max(iMaxNodeId, iIdNode); 
            }         

            //Le nouveau noeud
            XElement oNewNode =                
                    new XElement("noeud_perso",
                        new XAttribute("noeud_persoId", iMaxNodeId+1),
                        new XElement("nom_noeud_perso", "Mon_nom_toto");
            //sauvegarde du fichier XML
            docXMLFromLinq.Add(oNewNode);            
            docXMLFromLinq.Save(Application.StartupPath + @"\nomFichier.xml");
            //attention Nom_de_projet : remplacer par le nom de votre projet
            String sDestinationSauvegarde = Nom_de_votre_projet.Properties.Settings.Default.ModeleTypesDeFichier;
            
//Rien de plus facile que de supprimer un noeud :

XmlDocument docXML = new XmlDocument();
docXML.Load(Application.StartupPath + @"\nomFichier.xml");
XmlNodeList nodes = docXML.SelectNodes("/racine_perso/nom_noeud_perso");
      foreach (XmlNode node in nodes)
        {
         foreach (XmlNode oNodeEnfant in node.ChildNodes)
              {
               if (oNodeEnfant.Name == "nomtypelong" && 
                NodeEnfant.FirstChild.InnerText == oItem.ToString())
                  {                                                        
                   oNodeEnfant.ParentNode.ParentNode.RemoveChild(node);
                   docXML.Save(Application.StartupPath                + "\nomFichier.xml");                                                    
                   }
               }
          }

Conclusion :


Voila, aller zouuuuuu je reviens à mon visual studio

A voir également

Ajouter un commentaire Commentaires
Whismeril Messages postés 18608 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 septembre 2023 629
1 févr. 2016 à 18:24
Bonsoir, ce code n'a en fait rien à voir avec Winform, il se contente de lire et d'écrire un xml.

L'interfaçage n'est pas présenté.

J'ai écrit un tuto plus détaillé ici http://codes-sources.commentcamarche.net/faq/11196-linq-to-xml-c-et-vb-net

Pour afficher les données, tu peux utiliser le binding, voir ici
http://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
S'il te plait, j'ai besoin de ton aide
Comment tu insère ce code dans winform ?
mcferson Messages postés 33 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 1 juin 2012
14 oct. 2010 à 12:27
Et sinon, si on veut faire du VRAI LINQ to XML :

XElement root = XElement.Load("nomFichier.xml");
IEnumerable<XElement> noeuds =
from el in root.Elements("nom_noeud_perso")
where (string)el.Element == "nomtypelong"
select el;
foreach (XElement el in noeuds)
el.Remove
cs_driver Messages postés 7 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 7 janvier 2011 55
16 févr. 2009 à 10:27
t'as raison, mais ça reviens au même, puisque cette sauvegarde n'est executé qu'une seule fois, en + je viens de remarquer que j'a ioublier de standardiser le test sur le nom du noeud enfant mais je suppose que tout le monde l'a compris ça, comme j'ai marqué niveau expert les gens vont corriger d'eux même :)
lolo_thomas Messages postés 9 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 16 février 2009
16 févr. 2009 à 09:36
Heu... y'a un truc que je ne comprends pas. Pourquoi fais-tu un docXML.Save() à l'intérieur d'une double boucle ?

Pourquoi ne fais-tu pas la sauvegarde une seule fois et après la fin des boucles ?

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.