Update XAttribute value, where XAttribute Name = X

I have the following code that creates an XML file with order bundle information. And I would like to be able to update the entry in this XML file, instead of deleting everything and adding everything again.

I know I can do this:

xElement.Attribute(attribute).Value = value; 

But this will change every attribute with the same name as the attribute. How can I change the value of something only when the record identifier is "jason", for example? Do I need to upload an XML file, iterate over the entire file until it finds a match for the attribute that I want to change, then change it and then save the file again?

Any help / suggestions are appreciated.

thanks

This is what my XML file looks like:

  XElement xElement; xElement = new XElement("Orders"); XElement element = new XElement( "Order", new XAttribute("Id", CustomId), new XAttribute("Quantity", Quantity), new XAttribute("PartNo", PartNo), new XAttribute("Description", Description), new XAttribute("Discount", Discount), new XAttribute("Freight", Freight), new XAttribute("UnitValue", UnitValue), new XAttribute("LineTotal", LineTotal) ); xElement.Add(element); xElement.Save(PartNo + ".xml"); <?xml version="1.0" encoding="utf-8"?> <Orders> <Order Id="V45Y7B458B" Quantity="2" PartNo="5VNB98" Description="New Custom Item Description" Discount="2.00" Freight="2.90" UnitValue="27.88" LineTotal="25.09" /> <Order Id="jason" Quantity="2" PartNo="jason" Description="New Custom Item Description" Discount="2.00" Freight="2.90" UnitValue="27.88" LineTotal="25.09" /> </Orders> 
+6
source share
3 answers

Something like that:

 var doc = XDocument.Load("FileName.xml"); var element = doc.Descendants("Order") .Where(arg => arg.Attribute("Id").Value == "jason") .Single(); element.Attribute("Quantity").Value = "3"; doc.Save("FileName.xml"); 
+6
source

First you need to find the item you want to update. If you find it, do an update. Just remember to save the XDocument back to the file when you're done.

 XDocument doc = ...; var jason = doc .Descendants("Order") .Where(order => order.Attribute("Id").Value == "jason") // find "jason" .SingleOrDefault(); if (jason != null) // if found, { // update something jason.Attribute("Quantity").SetValue(20); } doc.Save(...); // save if necessary 
+2
source

How did you create the xml file. You know the root element of XML so you can use this code to get a specific

 TaxonPath = XElement.Parse(xml as string); txtSource.Text = FindGetElementValue(TaxonPath, TaxonPathElement.Source); XElement FindGetElementValue(XElement tree,String elementname) { return tree.Descendants(elementName).FirstOrDefault() ; } 

To this you can get the element now jkust Check its value and change it as you wish.

+2
source

Source: https://habr.com/ru/post/888498/


All Articles