在c#中编写具有特定XML结构的XML文件

时间:2014-07-02 08:18:24

标签: c# xml xmlwriter

我有一个XML文件(已经存在),我必须执行写操作。 XML Structure是这样的:

<IN.EM>
<Ch1>
<CONFIG_PARAM>
  <Item name="Base" value="0"/>
  <Item name="UpperLimt" value="0"/>
  <Item name="LowerLimit" value="0"/>
  <Item name="Label" value="1"/>
</CONFIG_PARAM>
</Ch1>
<Ch2>
<CONFIG_PARAM>
  <Item name="Base" value="0"/>
  <Item name="Upperimt" value="0"/>
  <Item name="LowerLimit" value="0"/>
  <Item name="Label" value="1"/>
</CONFIG_PARAM>
</Ch2>
 <CONFIG_PARAM>
  <Item name="Line" value="50"/>
  <Item name="Mark" value="1"/>
  <Item name="Language" value="LANG_ENG"/>
  <Item name="PID" value="001"/>
  <Item name="Formt" value="US"/>   
</CONFIG_PARAM>
</IN.EM>

如何在此处执行写操作?这样我就可以为每个属性分配新值。对于每个属性,我都有属性。

E.g。执行写入操作后,数据应显示<Item name="Base" value= "10"/>,之后我必须保存此值,下次启动应用程序时,它将显示最新值。

P.S:我编辑了节点特有的数据,比如节点ch1中的数据具有不同的属性,而ch2节点具有不同的属性,最后一个CONFIG_PARAM节点具有不同的属性。用户可能会更改ch1的值而不是其他值,因为我必须为其他人保存默认值。

更新:

foreach (ConfigParameterNode node in ch1)
        {
            switch (node.Name)
            {
                case "Label":
                    doc.Root.Elements("Ch1").First(m => m.Attribute("name").Value == "Label").SetElementValue("value", cfg[0].Label.ToString());
                    doc.Save(path);
                    break;
                case "LowerLimit":
                    doc.Root.Elements("Ch1").First(m => m.Attribute("name").Value == "LowerLimit").SetElementValue("value", cfg[0].LowerLimit.ToString());
                    doc.Save(path);
                    break;
                case "UpperLimt":
                    doc.Root.Elements("Ch1").First(m => m.Attribute("name").Value == "UpperLimt").SetElementValue("value", cfg[0].UpperLimt.ToString());
                    doc.Save(path);
                    break;
                case "Base":
                   doc.Root.Elements("Ch1").First(m => m.Attribute("name").Value == "Base").SetElementValue("value", cfg[0].Base.ToString());
                    doc.Save(path);
                    break;
            }
}

获取nullReference的异常:“对象引用未设置为对象的实例”

1 个答案:

答案 0 :(得分:0)

尝试签出XDocument类 (http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.aspx

您可以像这样附加到文件:

XDocument doc = XDocument.Load('filePath');
                doc.Root.Add(
                    new XElement("An Element Name",
                        new XAttribute("An Attribute", "Some Value"),
                        new XElement("Nested Element", "Inner Text"))
                    );
                doc.Save(filePath);

或者你可以搜索一个元素并像这样更新:

doc.Root.Elements("The element").First(m => m.Attribute("An Attribute").Value == "Some value to match").SetElementValue("The element to change", "Value to set element to");
doc.Save(filePath);