XmlDocument 是 .NET 中用于中小型 XML 文档的 DOM 操作类,支持加载(文件/字符串/流)、XPath 查询(SelectNodes/SelectSingleNode)、节点创建与插入(需同文档)、保存(Save/OuterXml)及命名空间处理等完整功能。

XmlDocument 是 .NET 中操作 XML 的经典类,适合处理中小型 XML 文档,支持加载、查询、修改、保存等完整 DOM 操作。它基于内存树结构,用起来直观,但要注意不是流式解析(不适用于超大文件)。
加载 XML 数据
可以从字符串、文件或流中加载 XML:
- 从文件加载:
doc.Load("config.xml"); - 从字符串加载:
doc.LoadXml(" ");- test
- 从 Stream 加载:
doc.Load(stream);
加载失败会抛出 XmlException,建议加 try-catch 处理格式错误。
查找和读取节点
常用方法有 SelectNodes() 和 SelectSingleNode(),支持 XPath 表达式:
- 查所有 name 元素:
doc.SelectNodes("//name") - 查第一个 user 节点下的 id:
doc.SelectSingleNode("/users/user[1]/id") - 读取属性值:
node.Attributes["id"]?.Value - 读取文本内容:
node.InnerText或node.FirstChild?.Value
注意:XPath 区分大小写,且默认不识别命名空间(如需处理带 ns 的 XML,得配 XmlNamespaceManager)。
创建和插入新节点
所有节点都需通过 XmlDocument 实例创建,不能直接 new:
- 创建元素:
XmlElement el = doc.CreateElement("status"); - 创建属性:
XmlAttribute attr = doc.CreateAttribute("code"); attr.Value = "200"; el.SetAttributeNode(attr); - 追加子节点:
parent.AppendChild(el); - 插入到指定位置:
parent.InsertBefore(newNode, refNode);
别忘了:新节点必须属于同一个 XmlDocument,跨文档直接赋值会报错。
保存和输出 XML
修改后调用 Save() 写入文件或流:
- 保存到文件:
doc.Save("output.xml"); - 保存到字符串:
string xmlStr = doc.OuterXml;(只读,不含格式化) - 美化输出(缩进)需用
XmlTextWriter或 .NET 6+ 的XmlSerializer配合XmlWriterSettings,XmlDocument 本身不自动格式化。
如果只是临时生成 XML 字符串用于日志或调试,OuterXml 最方便;要写文件就直接 Save()。
基本上就这些。XmlDocument 上手快,逻辑清晰,适合配置文件、简单数据交换等场景。不复杂但容易忽略命名空间和节点归属问题。










