[英]Edit specific Element in XDocument
我最近開始學習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>
在特定元素中更改值的最簡單方法是什么?
假設我要更改特定保存游戲的余額 。
我想通過IDNumber訪問保存游戲 (這些數字是唯一的)
然后,我想更改余額的值(例如,更改為50),然后將這些更改保存到我的文檔中。
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);
我認為最緊湊的方法是使用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);
學習XPath之后,您再也不需要真正手動返回枚舉節點了。
編輯:查詢是什么意思:
//savegame/IdNumber[text()='2']/../balance"
| | | ^ balance element ...
| | ^ ... of parent ...
| ^ ... of IdNumber element with inner value '2' ...
^ ... of any savegame element in the doc
這是執行此操作的簡單方法:
XmlDocument doc = new XmlDocument();
doc.Load(@"d:\tmp.xml");
XmlNode node = doc["Data"]["savegames"];
foreach (XmlNode childNode in node.ChildNodes)
{
if (childNode["IdNumber"].InnerText.Equals("1"))
{
childNode["balance"].InnerText = "88";
}
}
doc.Save(@"d:\tmp.xml");
該代碼僅更改ID為“ 1”的余額
它通過查看“ savegames”的子級並檢查每個項目的“ IdNumber”來實現
UpdateGameAttr(id , bal);
private void UpdateGameAttr(int id, int bal)
{
XDocument gmaes = XDocument.Load(@"D:\xxx\xxx\Game.xml");
XElement upd = (from games in games.Descendants("savegame")
where games.Element("IdNumber").Value == id.ToString()
select games).Single();
upd.Element("balance").Value = bal.ToString();
gmaes.Save(@"D:\xxxx\xxx\Game.xml");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.