我正在使用XML记录数据流。我知道,有更好的数据格式,但我们有我们的理由!按顺序编写XML
通常我会使用XmlDocument在内存中存储xml数据,然后写出整个事情。这在这里没有什么帮助,因为我们记录数据流的时间没有被指定,并且可能不会在任何足够短的时间段内被修复,以便不会耗尽内存。
最好的方法是什么?
谢谢。
我正在使用XML记录数据流。我知道,有更好的数据格式,但我们有我们的理由!按顺序编写XML
通常我会使用XmlDocument在内存中存储xml数据,然后写出整个事情。这在这里没有什么帮助,因为我们记录数据流的时间没有被指定,并且可能不会在任何足够短的时间段内被修复,以便不会耗尽内存。
最好的方法是什么?
谢谢。
那么,你可以使用XmlWriter
。棘手的一点是知道何时关闭文档 - 在这之前,它不会是有效的XML;在完成之后,你不能再追加它。
请注意,您不必使用XmlWriter
直接。例如,使用LINQ to XML(我的首选XML API; 多比XmlDocument
etc类更好),您可以创建作者,写出任何“标题”信息(例如容器的开始标记),然后创建XElement
对象对于每个要写入的值,请致电element.WriteTo(writer)
。
样品的编号:
using System;
using System.Xml;
using System.Xml.Linq;
class Test
{
static void Main()
{
using (XmlWriter writer = XmlWriter.Create("test.xml"))
{
writer.WriteStartDocument();
writer.WriteStartElement("log");
writer.WriteStartElement("entries");
for (int i = 0; i < 10; i++)
{
XElement element = new XElement("entry", "Entry " + i);
element.WriteTo(writer);
}
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
}
}
}
XmlWriter
提供了一种快速,非缓存,仅向前装置产生流或包含XML数据文件。
IMO最好的方法是使用XmlWriter类,请参阅this article。
感谢Jon,我会看看Linq的东西 - 我没有意识到还有另一个XML Api! – Nick 2011-03-31 15:57:27
@Nick:它是在.NET 3.5中引入的。如果您仍然使用.NET 2.0或3.0,则需要使用其他方法 - 但可能仍然涉及到XmlWriter。 – 2011-03-31 16:02:30
不,我们现在在3.5,谢谢! – Nick 2011-04-07 08:19:11