【发布时间】:2014-07-02 08:18:24
【问题描述】:
我有一个 XML 文件(已经存在),我必须在其中执行写操作。 XML结构是这样的:
<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>
如何在这里执行写操作?这样我就可以为每个属性分配新值。对于我拥有的每个属性。
例如执行写操作后数据应该显示<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 异常:“对象引用未设置为对象实例”
【问题讨论】:
-
文件是否已经存在并且您想要更改属性值,或者您会从头开始编写文件吗?从头开始创建显然很容易。修改:您可以将文件读入
XmlDocument,然后使用XPath表达式获取所需的节点,修改属性,然后将XML文件写回。 -
xml 文件已经存在,只是我必须修改值并保存每个属性的值。请为我的 xml 文件提供一些示例代码。这对我会更有帮助。
-
欢迎来到Stack Overflow。请查看How To Ask a Good Question,然后更新此内容以显示您已尝试过的内容。 (我建议在尝试修改文档之前先使用 LINQ to XML 创建整个文档——作为一个更易于使用的 API。那里有很多示例,例如 this。)
-
@user2932395 :-D 我知道 - StackOverflow 非常适合将模糊的问题转化为工作代码。但是,正如
Richard所写,请记住,产生好的答案取决于提出好的问题。