【问题标题】:Writing a XML file with specific XML structure in c#在 C# 中编写具有特定 XML 结构的 XML 文件
【发布时间】: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>

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

例如执行写操作后数据应该显示&lt;Item name="Base" value= "10"/&gt;,之后我必须保存这个值,下次我启动我的应用程序时它会显示最新的值。

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 所写,请记住,产生好的答案取决于提出好的问题。

标签: c# xml xmlwriter


【解决方案1】:

尝试检查 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);

【讨论】:

  • 我已经尝试过你的方法,也尝试过这个解决方案stackoverflow.com/questions/2424613/…,但问题是它提升了第一个价值并不是全部。请告诉我如何更新所有值。因为我有属性通过它更新 xml 文件中的值。
  • 您能否更新您的问题以显示您对这个问题有哪些 C# 代码?谢谢!
  • 我已经添加了我用来编辑现有 xml 文件中的值的 c#。
  • 尝试更改 ".SetElementValue("...");"到 ".SetAttributeValue("...")"。如果这不能解决问题,请尝试查找空引用的位置并发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-24
  • 2012-01-13
  • 2012-04-16
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
相关资源
最近更新 更多