如何使用C#更新XML文档中的特定值

时间:2013-05-19 21:38:38

标签: c# xml

我最近问了一个类似的问题,但是对于提议的解决方案存在问题,所以这次重新说明它与示例代码略有不同。我有一个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#的新手,所以尽可能多地使用上面的代码会让我的生活变得更轻松。谢谢,

1 个答案:

答案 0 :(得分:0)

我相信你可以这样做:

player["WinCount"].InnerText = Form1.winCount.ToString();
player["PlayCount"].InnerText = Form1.playCount.ToString();
player["Balance"].InnerText = Form1.decBalance.ToString();

文档here.