XmlTextReader 是已过时的旧版具体实现,XmlReader 是现代推荐的抽象基类;应使用 XmlReader.Create() 创建实例,因其更安全、灵活且跨平台兼容。

XmlTextReader 是 XmlReader 的一个具体实现,而 XmlReader 是一个抽象基类,提供统一的、只进、只读的 XML 数据读取接口。 简单说:XmlTextReader 是“旧版具体类”,XmlReader 是“现代推荐的抽象类型”;.NET Framework 2.0 起,XmlReader 成为主流用法,XmlTextReader 被标记为过时(obsolete),不建议新代码使用。
设计定位不同
XmlReader 是一个抽象类,定义了读取 XML 的核心契约(如 Read()、MoveToContent()、GetAttribute() 等),本身不能直接实例化。它支持多种底层实现,比如基于字符串、文件、流或自定义数据源的读取器。
XmlTextReader 是 .NET Framework 1.x 时期提供的一个具体实现,专为从文件或流中高效读取文本 XML 设计。它功能完整但扩展性差,且硬编码了部分行为(如默认 DTD 处理方式)。
创建方式和使用习惯不同
推荐用 XmlReader.Create() 工厂方法创建实例,它更灵活、安全,并自动应用默认安全设置:
- XmlReader.Create("file.xml") —— 读文件
- XmlReader.Create(new StringReader(xmlString)) —— 读字符串
- XmlReader.Create(stream, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore }) —— 自定义配置
XmlTextReader 需直接 new XmlTextReader("file.xml"),但该构造函数在 .NET Core/.NET 5+ 中已移除,仅在旧版 .NET Framework 中可用。
安全性和默认行为不同
XmlReader.Create() 默认禁用危险功能(如 DTD 解析、外部实体解析),降低 XXE 攻击风险;XmlTextReader 默认启用 DTD 处理,若未显式关闭,容易引发安全问题。
XmlReader 支持通过 XmlReaderSettings 精细控制验证、命名空间、行号、最大字符数等;XmlTextReader 的配置项少且分散(如 UseAsync、Normalization 属性),不易统一管理。
兼容性与维护状态
XmlTextReader 在 .NET Core 1.0 及后续所有 .NET 版本(包括 .NET 5/6/7/8)中已被完全移除,仅保留在 .NET Framework(最高到 4.8)中。微软官方文档明确建议迁移到 XmlReader.Create()。
所有新项目、跨平台开发、或需长期维护的代码,都应使用 XmlReader 及其工厂方法,避免绑定到已淘汰的具体类型。










