在C#开发中,XmlDocument是System.Xml命名空间下用于操作XML文档的核心类,它提供了完整的DOM(文档对象模型)操作能力,支持创建、修改、查询和保存XML文档,是处理XML格式数据的常用工具。

XmlDocument基础准备
使用XmlDocument前需要先引入对应的命名空间,在代码文件顶部添加以下引用:
using System.Xml;
XmlDocument的核心能力围绕XML节点展开,所有XML元素、属性、文本都属于对应的节点类型,常见节点类型如下:
| 节点类型 | 说明 |
|---|---|
| XmlNode | 所有XML节点的基类,包含节点名称、值、子节点等通用属性 |
| XmlElement | XML元素节点,对应XML中的标签,可包含属性和子元素 |
| XmlAttribute | XML属性节点,对应元素上的属性键值对 |
| XmlDeclaration | XML声明节点,对应文档开头的<?xml version="1.0"?>部分 |
创建XML文档完整步骤
1. 初始化XmlDocument对象
首先创建XmlDocument实例,这是所有操作的基础:
// 创建XmlDocument实例 XmlDocument xmlDoc = new XmlDocument();
2. 添加XML声明
XML文档通常需要声明版本和编码格式,通过CreateXmlDeclaration方法创建声明节点并添加到文档:
// 创建XML声明,版本1.0,编码UTF-8
XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
// 将声明节点添加到文档最前面
xmlDoc.AppendChild(xmlDeclaration);
3. 创建根节点
XML文档必须有且仅有一个根节点,通过CreateElement方法创建根元素,再添加到文档中:
// 创建根节点,名称为StudentList
XmlElement rootElement = xmlDoc.CreateElement("StudentList");
// 将根节点添加到文档
xmlDoc.AppendChild(rootElement);
4. 添加子元素与属性
可以在根节点下添加子元素,同时给元素添加属性或者文本内容:
// 创建第一个学生子元素
XmlElement student1 = xmlDoc.CreateElement("Student");
// 给学生元素添加ID属性
XmlAttribute idAttr1 = xmlDoc.CreateAttribute("ID");
idAttr1.Value = "1001";
student1.Attributes.Append(idAttr1);
// 给学生元素添加Name子元素
XmlElement name1 = xmlDoc.CreateElement("Name");
name1.InnerText = "张三";
student1.AppendChild(name1);
// 给学生元素添加Age子元素
XmlElement age1 = xmlDoc.CreateElement("Age");
age1.InnerText = "20";
student1.AppendChild(age1);
// 将学生元素添加到根节点
rootElement.AppendChild(student1);
// 创建第二个学生子元素
XmlElement student2 = xmlDoc.CreateElement("Student");
XmlAttribute idAttr2 = xmlDoc.CreateAttribute("ID");
idAttr2.Value = "1002";
student2.Attributes.Append(idAttr2);
XmlElement name2 = xmlDoc.CreateElement("Name");
name2.InnerText = "李四";
student2.AppendChild(name2);
XmlElement age2 = xmlDoc.CreateElement("Age");
age2.InnerText = "21";
student2.AppendChild(age2);
rootElement.AppendChild(student2);
5. 保存XML文档
完成节点构建后,通过Save方法将文档保存到指定路径:
// 保存文档到当前程序运行目录的students.xml文件
string savePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "students.xml");
xmlDoc.Save(savePath);
Console.WriteLine($"XML文档已保存至:{savePath}");
完整示例代码
以下是上述所有步骤整合后的完整可运行代码:
using System;
using System.Xml;
using System.IO;
namespace XmlDocumentDemo
{
class Program
{
static void Main(string[] args)
{
// 初始化XmlDocument
XmlDocument xmlDoc = new XmlDocument();
// 添加XML声明
XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
xmlDoc.AppendChild(xmlDeclaration);
// 创建根节点
XmlElement rootElement = xmlDoc.CreateElement("StudentList");
xmlDoc.AppendChild(rootElement);
// 添加第一个学生节点
XmlElement student1 = xmlDoc.CreateElement("Student");
XmlAttribute idAttr1 = xmlDoc.CreateAttribute("ID");
idAttr1.Value = "1001";
student1.Attributes.Append(idAttr1);
XmlElement name1 = xmlDoc.CreateElement("Name");
name1.InnerText = "张三";
student1.AppendChild(name1);
XmlElement age1 = xmlDoc.CreateElement("Age");
age1.InnerText = "20";
student1.AppendChild(age1);
rootElement.AppendChild(student1);
// 添加第二个学生节点
XmlElement student2 = xmlDoc.CreateElement("Student");
XmlAttribute idAttr2 = xmlDoc.CreateAttribute("ID");
idAttr2.Value = "1002";
student2.Attributes.Append(idAttr2);
XmlElement name2 = xmlDoc.CreateElement("Name");
name2.InnerText = "李四";
student2.AppendChild(name2);
XmlElement age2 = xmlDoc.CreateElement("Age");
age2.InnerText = "21";
student2.AppendChild(age2);
rootElement.AppendChild(student2);
// 保存文档
string savePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "students.xml");
xmlDoc.Save(savePath);
Console.WriteLine($"XML文档创建完成,保存路径:{savePath}");
// 读取保存的XML内容输出验证
Console.WriteLine("n生成的XML内容:");
Console.WriteLine(File.ReadAllText(savePath));
}
}
}
注意事项
- XmlDocument操作的是整个XML文档的DOM树,适合处理中小型XML文件,大文件建议使用XmlReader流式处理
- 添加节点时要注意节点的层级关系,避免添加重复的同级根节点
- 如果保存路径的目录不存在,
Save方法会抛出异常,需要提前确保目录存在 - XML元素名称和属性名称区分大小写,命名要符合XML规范,不能包含特殊字符
XmlDocument的DOM操作模式让XML处理更直观,开发者可以像操作树结构一样修改XML内容,掌握其基础用法能应对大部分C#中的XML创建需求。
C#XmlDocumentXML文档创建XML操作修改时间:2026-07-12 11:45:26