对于小型XML文件,利用XDocument和XMLDocument可以很方便进行读写(推荐XDocument),但问题是XDocument和XMLDocument是In-Memory类型的,随着文件大小的增大,内存消耗会越来越大,同时读写速度会降低。本文总结如下几种方式操作大型XML文件:
利用XmlReader或XmlTextReader流式加载、解析XML文件。
static IEnumerable<XElement> StreamXElements(string uri, string FindKey)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreWhitespace = true;
using (XmlReader rd = XmlReader.Create(uri, settings))
{
rd.MoveToContent();
while (!rd.EOF)
{
if(rd.NodeTyp == XElement && rd.Name == FindKey)
{
XElement item = XElement.ReadFrom(rd) as XElement;
if (item != null)
{
yield return item;
}
}
else
{
rd.Read();
}
}
}
}
其中,内部用XElement操作。
向已存在的大型XML文件中追加新结点,不能采用In-Memory的方式。推荐如下几种写方法:
1. XStreamingElement
问题引出:如何巨型xml文件;
参考:
How to: Perform Streaming Transform of Large XML Documents (C#) - msdn;
关于XStreamingElement vs XElement; Linq to Xml:XStreamingElement;
2. XML文件包含方法
利用包含文件 .txt 和 .xml实现大型XML文件的有效追加操作以及修改操作:
参考:
3. log4net
引用:using log4net.dll
问题引出:如何log4net to xml?;
如何使用:Write a class Deriving from XmlLayoutBase, override the FormatXml method and instruct your appender to use.
参考:
原文:http://www.cnblogs.com/wjcx-sqh/p/6476715.html