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 073 fois - Téléchargée 15 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

S'il te plait, j'ai besoin de ton aide
Comment tu insère ce code dans winform ?
Whismeril
Messages postés
13729
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 septembre 2019
302 > nounouche -
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
mcferson
Messages postés
33
Date d'inscription
jeudi 7 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2012
-
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
10 novembre 2011
6 -
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
-
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.