对于小型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