我最近问了一个类似的问题,但是对于提议的解决方案存在问题,所以这次重新说明它与示例代码略有不同。我有一个XML文件,用于存储游戏玩家的数据。我只需要定期从这个XML文件中找到一个玩家,并在特定玩家玩游戏时更新他的相关数据:
<?xml version="1.0"?>
<PlayerStats xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Player>
<Name>Jack</Name>
<WinCount>3</WinCount>
<PlayCount>9</PlayCount>
<Balance>500</Balance>
</Player>
<Player>
<Name>John</Name>
<WinCount>3</WinCount>
<PlayCount>9</PlayCount>
<Balance>940</Balance>
</Player>
</PlayerStats>
我需要代码来识别特定的播放器(例如John),并根据C#变量更新Wincount,Playcount和Balance数字。以下是我正在使用的一些示例C#代码:
XmlDocument doc = new XmlDocument();
doc.Load(xmlfilepath);
XmlNode player;
XmlNode root = doc.DocumentElement;
// below correctly pulls data for the specific player
player = root.SelectSingleNode("descendant::Player[Name='"+Form1.strPlayerName+"']");
// the "inner xml" for player = "<Name>John</Name><WinCount>3</WinCount><PlayCount>9</PlayCount><Balance>940</Balance>"
// since "Balance" was last, I tried using "LastChild" and the code below worked
player.LastChild.InnerText = Form1.decBalance.ToString(); //updates balance succesfully
doc.Save(xmlfilepath);
所以这适用于“LastChild”,但是如何更改“Wincount”,“PlayCount”和“Balance”而不将它们作为第一个或最后一个引用?在使用LINQ和XML序列化等之前我得到了一些建议,但它们引起了问题,我还不了解LINQ。我真的想要使用XmlDocument bc我觉得这个代码是95%的方式,我错过了一些简单的东西。我是C#的新手,所以尽可能多地使用上面的代码会让我的生活变得更轻松。谢谢,
答案 0 :(得分:0)
我相信你可以这样做:
player["WinCount"].InnerText = Form1.winCount.ToString();
player["PlayCount"].InnerText = Form1.playCount.ToString();
player["Balance"].InnerText = Form1.decBalance.ToString();
文档here.