在C#中更新大型xml文件

时间:2015-04-28 08:15:04

标签: c# xml linq-to-xml xmlreader xmlwriter

我正在编写一个工具,将一些xml节点注入我机器中的现有xml文件。 但是,由于文件大约为30MB,因此XDocument.Load(路径)将永远占用。

例如,

<a>
  <b>
    <c>123</c>
  </b>
</a> 

是大型xml文件的一部分。

我想在标签“b”下添加一个xml节点,如

<a>
  <b>
    <c>123</c>
    <d>456</d>
  </b>
</a>

该文件位于本地文件夹中,我想更新现有文件。

在没有完全加载的情况下更新大型xml文件的最佳方法是什么?

感谢。

2 个答案:

答案 0 :(得分:0)

您无法轻松编辑xml;好吧,你可以,但这样做会涉及计算编码的字节大小,扩展文件,并将插入点后的所有数据复制n个字节(小心不要覆盖你没有的数据&# 39; t read yet),并在插入点覆盖数据。

更典型的情况是,您可以使用XmlReader / XmlWriter对,逐个元素地读取和写入,但在插入点处除外,您可以在其中编写额外元素。

这两种选择都不重要。

您可以使用XmlSerializer代替XDocument 尝试 - 更简单的对象模型(即POCO模型)可能更容易,更有效地加载;但是,简单地说:如果你想频繁改变,xml并不是一个好的格式。

您可能考虑的另一个选项:XSLT(或可能是SAX);然后扫描模型成为API的工作,您只需要担心为您的更改添加模板。 XSLT并不是每个人都知道的工具,但它比<{1}}更容易尝试 lot (基本变换可以在几分钟内从样本中组合在一起)。

答案 1 :(得分:0)

嘿,你可以使用流媒体。

请看这个链接:http:// stackoverflow.com/questions/4255668/how-to-update-an-xml-file-without-loading-the-entire-file-in-memory

希望它有所帮助。