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();