我有一个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的异常:“对象引用未设置为对象的实例”
答案 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);