17370845950

C# XmlDocument怎么用 XmlDocument类操作XML教程
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.InnerTextnode.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 上手快,逻辑清晰,适合配置文件、简单数据交换等场景。不复杂但容易忽略命名空间和节点归属问题。