当前位置:  开发笔记 > 编程语言 > 正文

如何在C#3.5中对大型XML文件进行流式读取

如何解决《如何在C#3.5中对大型XML文件进行流式读取》经验,为你挑选了2个好方法。

如何在包含xs:sequence的大型XML文件上对根元素进行流式读取,而不将整个文件加载到内存中的XDocument实例中?



1> 小智..:

使用SAX样式的元素解析器和使用XmlReader.Create创建的XmlTextReader类将是一个好主意,是的.这是CodeGuru的一个稍微修改过的代码示例:

void ParseURL(string strUrl)
{
  try
  {
    using (var reader = XmlReader.Create(strUrl))
    {
      while (reader.Read())
      {
        switch (reader.NodeType)
        {
          case XmlNodeType.Element:
            var attributes = new Hashtable();
            var strURI = reader.NamespaceURI;
            var strName = reader.Name;
            if (reader.HasAttributes)
            {
              for (int i = 0; i < reader.AttributeCount; i++)
              {
                reader.MoveToAttribute(i);
                attributes.Add(reader.Name,reader.Value);
              }
            }
            StartElement(strURI,strName,strName,attributes);
            break;
            //
            //you can handle other cases here
            //
            //case XmlNodeType.EndElement:
            // Todo
            //case XmlNodeType.Text:
            // Todo
            default:
            break;
          }
        }
      }
      catch (XmlException e)
      {
        Console.WriteLine("error occured: " + e.Message);
      }
    }
  }
}



2> danny..:

我无法添加评论,因为我刚刚注册但由Hirvox发布的代码示例当前被选为答案有一个错误.new使用静态Create方法时不应该有语句.

当前:

using (var reader = new XmlReader.Create(strUrl))

固定:

using (var reader = XmlReader.Create(strUrl))

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有