在c#中更改xml值

时间:2018-05-31 13:14:42

标签: c# xml

我从昨天起就开始研究这个问题了。我有一个XML文件,看起来像这样

<catalog>
  <captureInfo>
    <row>5</row>
    <col>5</col>
  </captureInfo>

  <patientInfo>
    <name>XYZ</name>
    <detail>details here</detail>
  </patientInfo>

  <imageData>
    <r0c0>
      <contrastFlag>true</contrastFlag>
    </r0c0>
    <r0c1>
      <contrastFlag>true</contrastFlag>
    </r0c1>
  </imageData>
</catalog>

我需要更新XML文件中contrastFlag的值。这是我写的代码:

XmlDocument doc = new XmlDocument();
XmlNodeList imageData = doc.GetElementsByTagName("imageData");

foreach(XmlNode node in imageData)
{
    foreach (XmlNode innernode in node)
    {
        if (innernode.Name == "r0c0")
        {
            innernode.InnerText = "false";
        }
    }
}
doc.Save("XMLFile1.xml");

有谁能告诉我哪里出错了,还有更好/更快的方法吗?

2 个答案:

答案 0 :(得分:3)

首先,您的XML格式不正确,结果应与“目录”匹配。为什么不这样做:

string xml = @"<catalog>
  <captureInfo>
    <row>5</row>
    <col>5</col>
  </captureInfo>

  <patientInfo>
    <name>XYZ</name>
    <detail>details here</detail>
  </patientInfo>

  <imageData>
    <r0c0>
      <contrastFlag>true</contrastFlag>
    </r0c0>
    <r0c1>
      <contrastFlag>true</contrastFlag>
    </r0c1>
   </imageData>
</catalog>";

XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xml);
xdoc.SelectSingleNode("//catalog/imageData/r0c0/contrastFlag").InnerText = "false";

答案 1 :(得分:1)

这是一种使用LINQ替换所有实例的方法。我刚刚写了一个新文件来保存源代码。

StreamReader stream = new StreamReader(@"c:\test.xml");
XDocument doc = XDocument.Load(stream);

IEnumerable<XElement> flags = doc.Descendants("contrastFlag");

foreach (XElement e in flags)
{
      e.Value = "false";
}

doc.Save(@"c:\test2.xml");