Mettre à jour XML avec C # en utilisant Linq

Ma structure de fichier XML

  1 True Star Wars Figures LukeSkywalker   

LIRE DES DONNÉES À PARTIR DE XML PAR ITEMID

 XDocument xmlDoc = XDocument.Load(HttpContext.Current.Server.MapPath("data.xml")); var items = from item in xmlDoc.Descendants("item") where item.Element("itemID").Value == itemID select new { itemID = item.Element("itemID").Value, isGadget = bool.Parse(item.Element("isGadget").Value), name = item.Element("name").Value, text1 = item.Element("text1").Value, } foreach (var item in items) { .... } 

Comment mettre à jour les données XML par itemID? Merci!

Pour mettre à jour votre fichier XML, utilisez la méthode SetElementValue du XElement:

 var items = from item in xmlDoc.Descendants("item") where item.Element("itemID").Value == itemID select item; foreach (XElement itemElement in items) { itemElement.SetElementValue("name", "Lord of the Rings Figures"); } 

EDIT: Oui, j’ai essayé votre exemple et il enregistre les données mises à jour dans le fichier. Enregistrez votre code XML mis à jour avec la méthode Save du XDocument , voici le code que j’ai essayé:

 ssortingng xml = @"  1 True Star Wars Figures LukeSkywalker  "; XDocument xmlDoc = XDocument.Parse(xml); var items = from item in xmlDoc.Descendants("item") where item.Element("itemID").Value == "1" select item; foreach (XElement itemElement in items) { itemElement.SetElementValue("name", "Lord of the Rings Figures"); } xmlDoc.Save("data.xml"); 

Pour mettre à jour votre méthode XML, utilisez la méthode élément de XElement:

 XDocument xmlDoc = XDocument.Load(HttpContext.Current.Server.MapPath("data.xml")); var items = (from item in xmlDoc.Descendants("item") where item.Element("itemID").Value == itemID select item).ToList(); foreach (var item in items) { item.Element("itemID").Value=NewValue; bool.Parse(item.Element("isGadget").Value)=Newvalue; item.Element("name").Value=Newvalue; item.Element("text1").Value=Newvalue; } xmlDoc.Save(HttpContext.Current.Server.MapPath("data.xml")); 

ou

 XDocument xmlDoc = XDocument.Load(HttpContext.Current.Server.MapPath("data.xml")); foreach (var item in (from item in xmlDoc.Descendants("item") where item.Element("itemID").Value == itemID select item).ToList()) { item.Element("itemID").Value=NewValue; bool.Parse(item.Element("isGadget").Value)=Newvalue; item.Element("name").Value=Newvalue; item.Element("text1").Value=Newvalue; } xmlDoc.Save(HttpContext.Current.Server.MapPath("data.xml")); 

vous obtenez des informations sous forme dynamic et mettez à jour ces modifications dans les moyens relatifs aux événements de clic de bouton, vous devez d’abord vérifier si le code suivant de chargement de page est présent

 if(!Page.IsPostBack) { .... } 

Votre requête fait saillie vers un type anonyme. Si vous voulez simplement modifier les éléments eux-mêmes, vous voulez quelque chose comme:

 var items = from item in xmlDoc.Descendants("item") where item.Element("itemID").Value == itemID select item; 

Autrement connu comme:

 var items = xmlDoc.Descendants("item") .Where(item => item.Element("itemID").Value == itemID); 

Je vous suggère également d’appeler ToList() pour que la requête entière soit exécutée et que les résultats soient stockés dans une liste avant de commencer à modifier des éléments:

 var items = xmlDoc.Descendants("item") .Where(item => item.Element("itemID").Value == itemID) .ToList();