我正在使用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