Matthias Weiß Matthias Weiß - 3 months ago 12
C# Question

Edit specific Element in XDocument

I recently started learning C# and I ran into a problem using

XML.Linq
to store data. I hope the question is understandable as I am not familiar with all the correct terms yet and as English isn't my first language.

I read a lot of Questions/googled but I can not figure it out myself.

I want to update an existing XDocument File that looks like this:

<Data>
<IDCounter>2</IDCounter>
<Highscores>
.......
</Highscores>
<savegames>
<savegame>
<IdNumber>1</IdNumber>
<salutation>Mr</salutation>
<prename>Prename1</prename>
<surname>Surname1</surname>
<maximumbalance>100</maximumbalance>
<balance>100</balance>
</savegame>
<savegame>
<IdNumber>2</IdNumber>
<salutation>Mr</salutation>
<prename>Prename2</prename>
<surname>Surname2</surname>
<maximumbalance>100</maximumbalance>
<balance>100</balance>
</savegame>
</savegames>
</Data>


What is the easiest way to change a value in a specific Element?

Let's say I want to change the balance of a specific savegame.

I want to access the savegame by IdNumber (these numbers are unique)

Then I want to change the value of balance (for example to 50) and then save these changes to my document.

Answer

With using System.Xml.Linq; it becomes

 var doc = XElement.Load(fileName);
 var target = doc
      .Element("savegames")
      .Elements("savegame")
      .Where(e => e.Element("IdNumber").Value == "2")
      .Single();

 target.Element("balance").Value = "50";

 doc.Save(fileName2);