在.NET框架提供的XML处理类库中,XMLTextReader和XmlDocument是两种核心的XML读取实现,二者的设计理念和适用场景存在明显差异,理解这些差异能帮助开发者更合理地选择XML处理方式。

工作原理差异
XMLTextReader是基于流的前向只读XML读取器,它不会将整个XML文档加载到内存中,而是按照节点顺序逐个读取XML内容,读取过程中只会保留当前节点的相关信息。这种工作方式让它属于轻量级的XML处理工具。
XmlDocument则是基于文档对象模型(DOM)的XML处理类,它会将整个XML文档一次性加载到内存中,构建出完整的节点树结构,开发者可以通过节点关系随意访问文档中的任意节点,支持读写操作。
核心特性对比
我们可以通过以下维度更清晰地对比两者的差异:
| 对比维度 | XMLTextReader | XmlDocument |
|---|---|---|
| 内存占用 | 低,仅保留当前节点信息 | 高,需要加载整个文档到内存 |
| 读取方向 | 仅支持前向读取 | 支持任意方向遍历节点 |
| 读写能力 | 仅支持读取 | 支持读取和修改 |
| 适用文档大小 | 适合大体积XML文档 | 适合中小体积XML文档 |
| 使用复杂度 | 较高,需要手动处理节点遍历逻辑 | 较低,可通过节点关系快速定位内容 |
使用示例对比
XMLTextReader读取示例
假设我们有如下结构的XML文件,路径为D:test.xml:
<?xml version="1.0" encoding="utf-8"?>
<users>
<user id="1">
<name>张三</name>
<age>25</age>
</user>
<user id="2">
<name>李四</name>
<age>28</age>
</user>
</users>
使用XMLTextReader读取所有用户信息的代码如下:
using System;
using System.Xml;
class Program
{
static void Main()
{
// 创建XMLTextReader实例,传入XML文件路径
using (XmlTextReader reader = new XmlTextReader("D:\test.xml"))
{
string currentElement = "";
while (reader.Read())
{
// 判断当前节点类型
switch (reader.NodeType)
{
case XmlNodeType.Element:
currentElement = reader.Name;
// 如果是user节点,输出id属性
if (reader.Name == "user")
{
Console.WriteLine($"用户ID:{reader.GetAttribute("id")}");
}
break;
case XmlNodeType.Text:
// 根据当前元素名输出对应内容
if (currentElement == "name")
{
Console.WriteLine($"姓名:{reader.Value}");
}
else if (currentElement == "age")
{
Console.WriteLine($"年龄:{reader.Value}");
}
break;
}
}
}
}
}
XmlDocument读取示例
读取同一个XML文件,使用XmlDocument的实现代码如下:
using System;
using System.Xml;
class Program
{
static void Main()
{
// 创建XmlDocument实例
XmlDocument doc = new XmlDocument();
// 加载XML文件
doc.Load("D:\test.xml");
// 获取所有user节点
XmlNodeList userNodes = doc.SelectNodes("/users/user");
foreach (XmlNode userNode in userNodes)
{
// 获取id属性
string userId = userNode.Attributes["id"].Value;
// 获取name子节点内容
string userName = userNode.SelectSingleNode("name").InnerText;
// 获取age子节点内容
string userAge = userNode.SelectSingleNode("age").InnerText;
Console.WriteLine($"用户ID:{userId},姓名:{userName},年龄:{userAge}");
}
}
}
适用场景选择
如果处理的XML文件体积较大,比如超过几十MB,或者只需要顺序读取XML内容不需要修改,优先选择XMLTextReader,避免占用过多内存导致程序性能下降。
如果XML文件体积较小,需要频繁修改节点内容,或者需要随机访问文档中的不同节点,选择XmlDocument会更高效,开发成本也更低。
另外如果需要同时兼顾大文件处理和灵活的节点访问,也可以考虑使用XDocument类,它属于LINQ to XML的一部分,在易用性和性能之间做了更好的平衡。
XMLTextReaderXmlDocumentXML读取XML解析修改时间:2026-07-15 07:54:27