2011-03-31 71 views
0

我正在使用XML记录数据流。我知道,有更好的数据格式,但我们有我们的理由!按顺序编写XML

通常我会使用XmlDocument在内存中存储xml数据,然后写出整个事情。这在这里没有什么帮助,因为我们记录数据流的时间没有被指定,并且可能不会在任何足够短的时间段内被修复,以便不会耗尽内存。

最好的方法是什么?

谢谢。

回答

3

那么,你可以使用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(); 
     } 
    } 
} 
+0

感谢Jon,我会看看Linq的东西 - 我没有意识到还有另一个XML Api! – Nick 2011-03-31 15:57:27

+0

@Nick:它是在.NET 3.5中引入的。如果您仍然使用.NET 2.0或3.0,则需要使用其他方法 - 但可能仍然涉及到XmlWriter。 – 2011-03-31 16:02:30

+0

不,我们现在在3.5,谢谢! – Nick 2011-04-07 08:19:11

1

XmlWriter提供了一种快速,非缓存,仅向前装置产生流或包含XML数据文件。