增量地将XML XDocument写入磁盘,保持有效的XML



我将一些日志事件转储到XML文件中,每5分钟我启动一个新文件。我一直在用XDocument和XElement我很喜欢,

 _xDocument = XDocument.Parse("<LogEntires/>");
 _xDocument.Root.Add(xElementLogEventList.ToArray());
 _xDocument.Save(_outFileName);

我想每隔10秒左右用计时器将它持久化到磁盘,这样最近的事件就不只是在内存中,人们可以在必要时检查文件。但是XDocument只有Save()和WriteTo()方法来写整个文档。不加<标记,无论如何它将是无效的Xml。>

我的下一个想法是使用XmlWriter和刷新我的FileStream现在和然后,保持跟踪添加关闭标签自己…只有无效的XML,直到我完全完成并关闭文件。

我真的很想在磁盘上有有效的Xml,如果我想写一个根标签,然后五到十秒钟后,当我做下一次刷新,只是备份和删除根标签,附加下一个100个元素,写和刷新流。xmlWriter只是转发,所以我不确定最有效的方法来做到这一点。

在磁盘上保存有效xml的最有效方法是什么,但在最后保持流新元素,而不是每次都重写整个文档?我担心的是,我错过了一些明显的东西,如xDocument.AppendUpdatesToFile(_outfile)或类似的东西…

如果不是,如何有效地找到并删除最后的根标签,并以流方式附加新元素?

XML对磁盘上的这种更新不友好。

如果必须坚持使用XML,请考虑使用XML片段集合(基本上省略了初始的开始标记)。

一种简单(虽然不是很有效)的方法是创建文件,保存后包括标签,您可以通过加载它(根据需要经常)并使用类似于

的内容来"追加"条目。
xmlDoc.Element("Persons").Add(new XElement("Person", new XElement("Name", txtName.Text),
new XElement("City", txtCity.Text), new XElement("Age", txtAge.Text)));

然后保存…它保持有效…

示例代码参见http://www.linqhelp.com/linq-tutorials/adding-to-xml-file-using-linq-and-c/

最新更新