【问题标题】:C# Open, Edit then Save XML to FileC# 打开、编辑然后将 XML 保存到文件
【发布时间】:2012-09-10 18:01:21
【问题描述】:

我将如何编辑这个 XML 文件:

 <?xml version="1.0" encoding="utf-8" ?>
<employees>
  <employee id="657434365436543" name="Joe Bloggs" group="Manager" subgroup="Deputy">
    <contactDetails>
      <homePhone>6535436543</homePhone>
      <mobilePhone>654365436543</mobilePhone>
    </contactDetails>
    <personelFile>
      <rightToWork>
        <type>Permanent</type>
        <expires>Never</expires>
      </rightToWork>
      <nationalInsurance>6543655543</nationalInsurance>
      <startDate>01/09/2009</startDate>
    </personelFile>
    <holidays>
      <entitlements>
        <holidays>22</holidays>
        <bankHolidays>8</bankHolidays>
        <personalDays>1</personalDays>
      </entitlements>
      <taken>
        <holidays>1</holidays>
        <bankHolidays>0</bankHolidays>
        <personalDays>0</personalDays>
      </taken>
      <remaining>
        <holidays>21</holidays>
        <bankHolidays>8</bankHolidays>
        <personalDays>1</personalDays>
      </remaining>
      <booked>
        <holidays>22</holidays>
        <bankHolidays>8</bankHolidays>
        <personalDays>1</personalDays>
      </booked>
      <remainingtobook>
        <holidays>0</holidays>
        <bankHolidays>0</bankHolidays>
        <personalDays>0</personalDays>
      </remainingtobook>
    </holidays>
    <shifts>
      <monday>
        <start>0800</start>
        <end>1300</end>
      </monday>
      <tuesday>
        <start>0800</start>
        <end>1300</end>
      </tuesday>
      <wednesday>
        <start>0800</start>
        <end>1300</end>
      </wednesday>
      <thursday>
        <start></start>
        <end></end>
      </thursday>
      <friday>
        <start>0800</start>
        <end>1300</end>
      </friday>
      <saturday>
        <start>0800</start>
        <end>1200</end>
      </saturday>
      <sunday>
        <start></start>
        <end></end>
      </sunday>
    </shifts>  
  </employee>
</employees>

到目前为止,我可以从 XML 中选择正确的员工:

XmlTextReader employeesReader = new XmlTextReader("Employees.xml");
            var employeesXdoc = XDocument.Load(employeesReader);

            var employees = from employee in employeesXdoc.Descendants("employee")
                            where employee.Attribute("id").Value.ToString() == employeeSelect.Value.ToString()
                            select new
                        {
                            nodes =  employee.Nodes()
                        };

            foreach (var employee in employees)
            {
                // WHAT TO PUT HERE?
            }

我猜我已经找到了插入文件编辑的正确位置,但是我需要知道如何正确编辑它,然后将其保存到文件中而不会丢失其中包含的所有其他内容(否则我会只需覆盖整个文件。

感谢您的帮助。

【问题讨论】:

  • 嗨,Alex,请在// WHAT TO PUT HERE? 评论中说明您想要做什么。您要添加节点、删除节点、编辑属性吗?我不确定在这里使用 var 的效果如何,因为某些属性只能从 XmlElement 访问,而不能从 XmlNode 访问。保存非常简单,请浏览网页。
  • 如果您使用的是 LINQ to XML,您需要在完成更改后调用 .Save("Employees.xml") 并覆盖现有文件。 FWIW,您也不需要 XmlTextReader。你可以设置employeesXdoc = XDocument.Load("Employees.xml");

标签: c# .net xml linq


【解决方案1】:

使用 xml-serializer-class 也是一个好主意。

在那里您可以使用常用对象并稍后将其保存到 xml :)

http://msdn.microsoft.com/en-us/library/ms733901.aspx

【讨论】:

    【解决方案2】:

    这是一个有用的链接,用于更新 XML 文件,而无需在每次保存时全部重写: http://support.microsoft.com/kb/301233

    一般的想法是使用 XMLDocument 而不是 XMLTextReader 并将您的 .xml 文件加载到 XMLDocument 对象中。然后抓住根节点并开始导航/查询。找到要编辑的节点后,进行更改。然后当你完成后,使用 XMLDocument.Save(path) 来保存你的 chagnes。

    IO 流是一种现象,因此您不能使用读取器/写入器,除非您想覆盖现有文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多