在XDocument中编辑特定元素

Mat*_*eiß 36 c# xml linq

我最近开始学习C#,我遇到了一个XML.Linq用来存储数据的问题.我希望这个问题是可以理解的,因为我还不熟悉所有正确的术语,因为英语不是我的第一语言.

我读了很多问题/谷歌搜索,但我自己无法弄清楚.

我想更新一个如下所示的现有XDocument文件:

<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> 
Run Code Online (Sandbox Code Playgroud)

更改特定元素中值的最简单方法是什么?

假设我想改变特定存档平衡.

我想通过IdNumber访问存档游戏(这些数字是唯一的)

然后我想更改balance的值(例如更改为50),然后将这些更改保存到我的文档中.

Hen*_*man 44

随着using System.Xml.Linq;它成为

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

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

 doc.Save(fileName);
Run Code Online (Sandbox Code Playgroud)


gwi*_*rrr 21

我认为最简单的方法是使用XDocument(System.Xml.Linq)和XPath扩展(System.Xml.XPath):

var xdoc = XDocument.Load(file);
xdoc.XPathSelectElement("//savegame/IdNumber[text()='2']/../balance").Value = "50";
xdoc.Save(file);
Run Code Online (Sandbox Code Playgroud)

一旦你学习了XPath,你就不会真的想回到手动枚举节点.

编辑:查询的含义是什么:

//savegame/IdNumber[text()='2']/../balance"
  |        |                    |  ^ balance element ...
  |        |                    ^ ... of parent ...
  |        ^ ... of IdNumber element with inner value '2' ...
  ^ ... of any savegame element in the doc
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到XPath帮助,以及此处的更新链接.

  • 这是更新的[link](http://www.w3schools.com/xsl/xpath_intro.asp)到XPath的帮助. (2认同)