0

0

C#怎么用XmlReader逐行读取大型XML文件

月夜之吻

月夜之吻

发布时间:2025-12-21 10:39:07

|

708人浏览过

|

来源于php中文网

原创

XmlReader 是 C# 中高效流式解析大型 XML 的首选,逐节点而非逐行读取,需用 XmlReader.Create() 配合 XmlReaderSettings(如 IgnoreWhitespace、DtdProcessing.Ignore)配置,通过 Read() 和 NodeType 判断驱动循环,边读边处理、及时释放资源。

c#怎么用xmlreader逐行读取大型xml文件

XmlReader 是 C# 中高效读取大型 XML 文件的首选方式,它采用流式(SAX 风格)解析,不加载整个文档到内存,适合处理 GB 级 XML。关键不是“逐行”,而是“逐节点”——XML 没有严格意义上的“行”概念,但你可以按元素、属性、文本等粒度精准控制读取。

用 XmlReader.Create() 创建轻量读取器

避免直接 new XmlReader(),用静态工厂方法创建,并可传入配置:

  • 设置 XmlReaderSettings 控制是否忽略空白、是否校验 DTD、是否展开实体等
  • 对超大文件,建议关闭 DTD 处理(settings.DtdProcessing = DtdProcessing.Ignore)防止外部实体攻击或意外网络请求
  • 示例:var settings = new XmlReaderSettings { IgnoreWhitespace = true, DtdProcessing = DtdProcessing.Ignore };

用 Read() + 节点类型判断驱动循环

核心是调用 Read() 方法前进到下一个节点,再用 NodeTypeName 判断当前是什么内容:

  • XmlNodeType.Element:遇到开始标签,如 ;可用 reader.GetAttribute("id") 读属性
  • XmlNodeType.Text:读取元素内的纯文本内容(注意:需先 Read() 到该节点)
  • XmlNodeType.EndElement:遇到结束标签,如 ,常用于配对逻辑或清理
  • 跳过注释、处理指令等干扰项:检查 reader.NodeType != XmlNodeType.Comment

按需提取数据,避免缓存整棵树

不要把所有节点存进 List 或 XElement;而是边读边处理:

ChartGen
ChartGen

AI快速生成专业数据图表

下载
  • 遇到目标元素(如 ),立刻新建临时对象,用 while 循环读其子节点填充字段
  • 读完一个完整业务单元(如一个订单),立即入库、写日志或发送消息,然后丢弃引用
  • 若需 XPath 定位,XmlReader 不支持;此时应改用 XDocument.Load(reader)(仅限小片段)或结合 XmlReader.ReadSubtree() 提取子树

别忘了异常处理和资源释放

XmlReader 可能因格式错误抛出 XmlException,且必须显式释放:

  • using 语句确保 Close() 被调用,即使发生异常
  • 捕获 XmlException 并记录行号(e.LineNumber)和位置(e.LinePosition),方便定位坏数据
  • 示例:using var reader = XmlReader.Create("data.xml", settings);

基本上就这些。不用加载全量 DOM,靠状态机式推进,配合清晰的节点类型分支,就能稳稳吃下几个 GB 的 XML。不复杂但容易忽略细节,比如空白处理和 DTD 关闭——这两点往往是大文件解析失败的隐形原因。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

85

2023.09.25

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1878

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2085

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

998

2024.11.28

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

2950

2024.08.14

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

61

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

31

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

72

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

20

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.7万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 18.8万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 12.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号