如何在不使用Linq的情况下更新xml文件?

时间:2018-05-22 10:28:22

标签: c# xml

我有这个xml文件:

<students>
<student>
    <name>Mark</name>
    <age>20</age>
</student>
<student>
    <name>Adam</name>
    <age>32</age>
</student>

我想改变亚当的年龄,因为我做了:

XmlDocument doc = new XmlDocument();
doc.Load("/path/to/sutdents.xml");
XmlNode n = doc.SelectSingleNode("/students/student[name='" + student.name + 
"']");
if (n != null)
{
   n.SelectNodes("age").Item(0).FirstChild.Value = new_value;
}

但我得到“n”作为空值。 我尝试了另一种方法,通过使用foreach搜索节点并进行更改,但我得到Null Exception:

XmlDocument doc = new XmlDocument();
doc.Load("/path/to/sutdents.xml");
XmlNodeList nodes = doc.SelectNodes("/students/student");
foreach (XmlNode node in nodes)
 {
   if (node.FirstChild.InnerText == student.name)
    {
     node.SelectSingleNode("age").InnerText = new_value;
    }
  }

我在这里想念的是什么? 提前致谢

4 个答案:

答案 0 :(得分:1)

我希望这会有所帮助;

使用 foreach

 XmlNodeList studentsList = doc.ChildNodes[0].SelectNodes("student");

foreach (XmlNode node in studentsList)
{
  if (node.ChildNodes[0].InnerText == student.name) //name
   {
      node.ChildNodes[1].InnerText = new_value; //age
   }
}

答案 1 :(得分:1)

我试图运行你的代码。那是工作!检查student.name的值是多少。

XML [sutdents.xml]

<?xml version="1.0" standalone="yes"?>
<students>
  <student>
    <name>Mark</name>
    <age>20</age>
  </student>
  <student>
    <name>Adam</name>
    <age>32</age>
  </student>
</students>

示例代码:

XmlDocument doc = new XmlDocument();
doc.Load("sutdents.xml");
XmlNode n = doc.SelectSingleNode("/students/student[name='Adam']");
if (n != null)
{
    n.SelectNodes("age").Item(0).FirstChild.Value = "44";
}
doc.Save("sutdents.xml");

答案 2 :(得分:0)

您的代码是正确的,这里是您的调试代码的屏幕截图,其中包含相同的xml和提到的代码,请检查您是否传递了具有正确值且区分大小写的student.name。

enter image description here

答案 3 :(得分:-1)

使用XDocument尝试此操作:

private static void UpdateXML(string xmlpath, string studentName, int age)
{
    var doc = XDocument.Load(xmlpath);

    //Get student
    var student = doc.Descendants("student").Where(att => att.Element("name") != null && att.Element("name").Value.Equals(studentName)).FirstOrDefault();
    if (student != null)
        student.Element("age").Value = age.ToString();
    doc.Save(xmlpath);
}