使用xmldocument编辑xml文件,按属性搜索

时间:2019-02-27 20:45:06

标签: c# wpf

我想写一个小程序。使用此程序,我想通过搜索特定的属性名称来编辑xml文件。该属性名称在我的xml文件中多次出现,只是数量有所变化。我知道我可以通过使用linq或xmldocument来做到这一点,有很多解决方案。我写的代码对我来说似乎是正确的,我不明白这里有什么问题。有人可以看一下我的代码吗?感谢您的帮助。

我要编辑的只是余额。不多。真的就是这些。

我的xml文件:

<?xml version=“1.0” encoding=“utf-8”?>
<Data>
<Place>
<Date Month="February">
  <Counter>2</Counter>
  <Player>1</Player>
  <Player>2</Player>
     <Game Name="Football">
       <IdNumber>1</IdNumber>
       <salutation>Mr</salutation>
       <prename>Prename1</prename>
       <surname>Surname1</surname>
       <maximumbalance>100</maximumbalance>
       <balance>100</balance>
    </Game>
    <Game Name="Tennis">
       <IdNumber>2</IdNumber>
       <salutation>Mr</salutation>
       <prename>Prename2</prename>
       <surname>Surname2</surname>
       <maximumbalance>100</maximumbalance>
       <balance>100</balance>
     </Game>
   </Date>
</Place>
</Data> 

我的解决方案在这里:

private void edit_Click(object sender, RoutedEventArgs e)

{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(Path);
XmlNode node = xdoc["Data"]["Place"]["Date"]["Game"]
int countvalues = 100;

for (int i = 0; i < countvalues; i++)

foreach (XmlNode childNode in node.ChildNodes)
{
if (childNode.Attributes["Name"].InnerText.Equals("Tennis"))
{
childNode["balance"].InnerText = xBal.Text;
}
}
xdoc.Save(Path);

}

我的xml文件中还有很多条目(Tennis1,Tennis2等),这现在不是问题,

这一行:childNode.Attributes [“ Name”]。InnerText.Equals(“ Tennis”))为空,不知道为什么

...我正在使用Visual Studio 2015和WPF

致谢 马丁

3 个答案:

答案 0 :(得分:1)

您的代码与Xml文档的结构不完全匹配。您忽略了Player元素。尝试XmlNode node = xdoc [“ Data”] [“ Place”] [“ Date”] [“ Player”] [“ Game”]

答案 1 :(得分:0)

请尝试使用此示例。 我认为它将正常运行。

        string xBal = "200";
        string path = "D:\\xml.xml";

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(path);
        XmlNodeList NodeList = xmlDoc.GetElementsByTagName("Game");

        foreach (XmlNode item in NodeList)
        {
            if (item.Attributes[0].InnerText.Equals("Tennis"))
            {
                XmlNode balance = item.SelectSingleNode("balance");

                balance.InnerText = xBal;
            }
        }

        xmlDoc.Save(path);

答案 2 :(得分:0)

这应该为您工作。您的主节点已经包含Game元素-这就是为什么您将无法在ChildNode中找到它的原因。我更正了您的主要路径,不包括“游戏”节点。现在,您可以在ChildNodes集合中找到它。我为Node.Name和Attribute名称添加了一些检查,以确保它是Game节点。它应该为您工作。

Settings