XmlReader 和 XmlWriter 是 .NET 中轻量、高性能的流式 XML 处理类,基于“拉”和“推”模型,支持只读前向遍历与顺序写入,适用于大文件处理;二者可配合实现边读边写的流式转换。

XmlReader 和 XmlWriter 是 .NET 中轻量、高性能的流式 XML 处理类,不加载整个文档到内存,适合处理大文件或对性能敏感的场景。它们基于“推”(Writer)和“拉”(Reader)模型,操作的是 XML 节点流,而非 DOM 树。
XmlReader:只读、前向、单次遍历
XmlReader 是只进、只读的游标式读取器,逐个读取节点(如 StartElement、Text、EndElement),不能回退或随机访问。
- 用 XmlReader.Create() 创建实例,支持从 Stream、TextReader、Uri 或字符串输入
- 调用 Read() 移动到下一个节点,返回 bool 表示是否还有节点
- 通过 NodeType 判断当前节点类型(Element、Text、EndElement 等)
- 用 Name、Value、GetAttribute() 获取内容和属性
示例:读取
using var reader = XmlReader.Create("books.xml");
while (reader.Read()) {
if (reader.NodeType == XmlNodeType.Element && reader.Name == "book") {
string id = reader.GetAttribute("id"); // "1"
}
else if (reader.NodeType == XmlNodeType.Element && reader.Name == "title") {
reader.Read(); // 移动到 Text 节点
string title = reader.Value; // "C#入门"
}
}登录后复制
XmlWriter:只写、顺序生成、自动格式校验
XmlWriter 是顺序写入器,按 XML 规则生成节点流,会自动处理缩进、转义、命名空间和格式合法性(如匹配起始/结束标签)。
- 用 XmlWriter.Create() 创建,可传入 StreamWriter、Stream 或 StringBuilder
- 用 WriteStartElement() / WriteEndElement() 写元素;WriteValue() 写文本内容
- 用 WriteAttributeString() 写属性;WriteComment()、WriteProcessingInstruction() 写注释和 PI
- 必须显式调用 Flush() 或 Close() 确保内容写出
示例:生成一个简单 book 元素
标签: node switch stream c# 内存占用 .net
还木有评论哦,快来抢沙发吧~