.NET Core中如何处理xml文件 System.Xml.XmlReader入门

XmlReader是.NET Core中高效处理大型XML文件的只读向前读取类,适用于高性能场景。通过XmlReader.Create()创建实例,结合Read()方法遍历节点,利用IsStartElement判断元素,访问属性和值提取数据,配合XmlReaderSettings可提升安全性,适合流式读取配置、日志等结构化信息。

在 .NET Core 中处理 XML 文件,System.Xml.XmlReader 是一个高效、只读、向前读取的类,适合处理大型 XML 文件或需要高性能解析的场景。它基于流式读取,内存占用小,是读取 XML 的推荐方式之一。

XmlReader 简介

XmlReader 提供一种快速、非缓存、只进的 XML 数据读取方式。它不加载整个文档到内存,因此非常适合处理大文件。

常见使用场景包括:

  • 从配置文件中提取特定数据
  • 解析第三方提供的 XML 数据流
  • 读取日志或导出文件中的结构化信息

创建和使用 XmlReader

你可以通过 XmlReader.Create() 方法创建实例,传入文件路径、Stream 或 TextReader。

示例:读取一个简单的 XML 文



  
    C# 入门经典
    John Doe
  
  
    ASP.NET 核心开发
    Jane Smith
  

使用 XmlReader 读取内容:

using System;
using System.Xml;

var reader = XmlReader.Create("books.xml");

while (reader.Read()) { if (reader.IsStartElement("Book")) { string id = reader["Id"]; // 读取属性 Console.WriteLine($"书籍 ID: {id}"); } else if (reader.IsStartElement("Title")) { reader.Read(); // 移动到文本节点 Console.WriteLine($"标题: {reader.Value}"); } else if (reader.IsStartElement("Author")) { reader.Read(); Console.WriteLine($"作者: {reader.Value}"); } }

关键方法和属性说明

常用成员帮助你控制读取流程:

  • Read():前进到下一个节点,返回 false 表示已到末尾
  • IsStartElement():判断当前节点是否为指定元素开始
  • ["AttributeName"]:获取当前元素的属性值
  • Value:获取当前节点的文本值(注意节点类型)
  • Name / LocalName:获取节点名称

注意:调用 Read() 后需判断节点类型(如 Element、Text、EndElement),避免误读。

设置 XmlReader 配置(可选)

可通过 XmlReaderSettings 控制行为,例如关闭 DTD 处理提升安全性:

var settings = new XmlReaderSettings
{
    DtdProcessing = DtdProcessing.Prohibit, // 防止 XXE 攻击
    IgnoreWhitespace = true
};

using var reader = XmlReader.Create("books.xml", settings);

基本上就这些。XmlReader 虽然不如 LINQ to XML 直观,但在性能敏感或资源受限的场景下非常实用。掌握基本读取模式后,处理大多数 XML 场景都不成问题。