c# - 如何在 C# 3.5 中流式读取大型 XML 文件

标签 c# .net xml .net-3.5 streaming

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

最佳答案

使用 SAX 风格的元素解析器和 XmlTextReader使用 XmlReader.Create 创建的类会是个好主意,是的。这是来自 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);
      }
    }
  }
}

关于c# - 如何在 C# 3.5 中流式读取大型 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45481/

相关文章:

c# - 多目标 .NET Framework 4 和 Visual Studio 2012

c# - 从 byte[] 返回文件在 MVC 3 中无法正常工作

c# - .Net Rest Web 服务响应具有默认的数据协定命名空间而不是预期的命名空间

Python 的 csv、xml 和特殊字符问题

c# - 不使用 try/catch 检查格式正确的 XML?

C# 在当前 ListView 中拖放 move 项目

c# - .NET 中用户友好的属性名称,如 Rails 中的属性名称

c# - 仅获取响应 header

xml - YAML 如何表示 XML 属性?

c# - 对齐标签、按钮和文本框的正确方法