我正在使用XDocument和XElement对象来编写一个大型XML文件(目前为8MB)。我想切换到XStreamingElement,这样我就可以在不将所有数据同时存储在内存中的情况下编写文件。不幸的是,我需要包含一个编码声明。如果不使用XDocument,我可以这样做吗?
答案 0 :(得分:3)
技巧是在创建XmlWriter时使用XmlWriterSettings指定编码。它会自动生成声明。
var doc =
new XStreamingElement("openerp",
LoadReferenceData(),
LoadAccounts(),
LoadPartners(),
LoadComponents());
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.Encoding = Encoding.GetEncoding("latin1");
using (var writer = XmlWriter.Create(
outputFilename.Text,
settings))
{
doc.WriteTo(writer);
}
每个Load方法都返回IEnumerable,并在循环访问数据库查询结果时使用yield return
生成XML。