【问题标题】:How to change the data within elements in a XML file using C#?如何使用 C# 更改 XML 文件中元素内的数据?
【发布时间】:2013-03-09 03:09:20
【问题描述】:

我对 C# ASP.NET 中的 XML 文件有点陌生。我有以下格式的 XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Installation>
  <ServerIP>192.168.20.110</ServerIP>
  <DB_Name>USTCKT1</DB_Name>
  <Username>jorame</Username>
  <Password>Cru$%e20</Password>
  <Table_PreFix>TCK</Table_PreFix>
</Installation>

我需要更改每个元素中的值。例如,当用户单击时,我应该能够将 192.168.20.110 替换为 192.168.1.12。

我怎样才能做到这一点?任何帮助将不胜感激。

【问题讨论】:

    标签: c# asp.net .net xml


    【解决方案1】:

    您应该考虑使用 XDocument 类中的方法。 http://msdn.microsoft.com/en-us/library/bb301598.aspx

    具体看方法:Load(string) - 加载 XML 文件,Element() - 访问特定元素和 Save(string) - 保存 XML 文档。 Element() 上的页面有一些可以提供帮助的示例代码。 http://msdn.microsoft.com/en-us/library/system.xml.linq.xcontainer.element.aspx

    【讨论】:

      【解决方案2】:

      您可以使用 XDocument 类执行以下操作:

      XDocument doc = XDocument.Load(file.xml);
      doc.Element("Installation").Element("ServerIP").Value = "192.168.1.12";
      //Update the rest of the elements
      doc.Save(file.xml);
      

      More Details

      如果您在选择元素时遇到命名空间问题,则需要在 XElement 选择器中包含 xml 命名空间,例如 doc.Element(namspace + "Installation")

      【讨论】:

      • 这会替换当前值吗?
      • @jorame 是的,它会的。保存将覆盖 XDocument 中的 xml
      【解决方案3】:

      一般来说,你可以按照以下步骤进行:

      1. 创建一个新的 XmlDocument 对象并加载内容。内容可能是文件或字符串。
      2. 找到要修改的元素。如果你的xml文件结构过于复杂,可以使用xpath你找到你想要的。
      3. 将您的修改应用于该元素。
      4. 更新您的 xml 文件。

      这是一个简单的演示:

          XmlDocument xmlDoc = new XmlDocument();
          xmlDoc.Load("file.xml"); // use LoadXml(string xml) to load xml string
          string path = "/Installation/ServerIP";
          XmlNode node = xmlDoc.SelectSingleNode(path); // use xpath to find a node
          node.InnerText = "192.168.1.12"; // update node, replace the inner text
          xmlDoc.Save("file.xml"); // save updated content   
      

      希望对你有帮助。

      【讨论】:

      • 您介意展示一下如何读取节点内部的内容吗?
      • @jorame 我的荣幸。 XmlNode 有很多有用的属性。(msdn.microsoft.com/en-us/library/…) 我们以“ServerIP”为例。 node.InnerText 将返回“192.168.1.12”,如果节点中有属性,可以使用 node.Attributes["attributeName"] 获取该属性。
      • 非常感谢您的帮助。我能够完成这个过程。
      猜你喜欢
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多