首页 > 其他 > 详细

操作大型XML文件

时间:2017-02-27 23:03:46      阅读:137      评论:0      收藏:0      [点我收藏+]

 

对于小型XML文件,利用XDocument和XMLDocument可以很方便进行读写(推荐XDocument),但问题是XDocument和XMLDocument是In-Memory类型的,随着文件大小的增大,内存消耗会越来越大,同时读写速度会降低。本文总结如下几种方式操作大型XML文件:

读 - Read

利用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操作。  

写 - Write

向已存在的大型XML文件中追加新结点,不能采用In-Memory的方式。推荐如下几种写方法:

1. XStreamingElement

问题引出:如何巨型xml文件

参考:

XStreamingElement类 - msdn

How to: Perform Streaming Transform of Large XML Documents (C#) - msdn

关于XStreamingElement vs XElement;  Linq to Xml:XStreamingElement

2. XML文件包含方法

利用包含文件 .txt 和 .xml实现大型XML文件的有效追加操作以及修改操作:

  • .xml:格式正确的标准XML文件
  • .txt:XML片段

参考:

修改大型 XML 文件的有效方法 - MSDN

3. log4net

引用:using log4net.dll

问题引出:如何log4net to xml?

如何使用:Write a class Deriving from XmlLayoutBase, override the FormatXml method and instruct your appender to use. 

参考:

关于XML格式化的问题xml日志乱码的问题

如何使用log4net写XML

操作大型XML文件

原文:http://www.cnblogs.com/wjcx-sqh/p/6476715.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!