在C#开发中,XML文件常被用来存储配置信息、数据交换内容,掌握XML文件的读写和节点操作是开发者的必备技能,常用的操作方式是基于System.Xml命名空间下的XmlDocument类实现。

C#读写XML文件的核心类准备
首先需要引入对应的命名空间,所有XML相关操作都依赖System.Xml,代码开头需要添加引用:
using System.Xml;
创建并写入XML文件实例
下面的示例会创建一个包含学生信息的XML文件,并写入到本地磁盘:
// 创建XmlDocument对象
XmlDocument xmlDoc = new XmlDocument();
// 创建XML声明节点
XmlDeclaration xmlDec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
xmlDoc.AppendChild(xmlDec);
// 创建根节点
XmlElement root = xmlDoc.CreateElement("Students");
xmlDoc.AppendChild(root);
// 创建第一个学生节点
XmlElement student1 = xmlDoc.CreateElement("Student");
// 设置学生节点的属性
student1.SetAttribute("Id", "1");
// 创建子节点
XmlElement name1 = xmlDoc.CreateElement("Name");
name1.InnerText = "张三";
XmlElement age1 = xmlDoc.CreateElement("Age");
age1.InnerText = "20";
// 组装节点
student1.AppendChild(name1);
student1.AppendChild(age1);
root.AppendChild(student1);
// 创建第二个学生节点
XmlElement student2 = xmlDoc.CreateElement("Student");
student2.SetAttribute("Id", "2");
XmlElement name2 = xmlDoc.CreateElement("Name");
name2.InnerText = "李四";
XmlElement age2 = xmlDoc.CreateElement("Age");
age2.InnerText = "21";
student2.AppendChild(name2);
student2.AppendChild(age2);
root.AppendChild(student2);
// 保存XML文件到指定路径
xmlDoc.Save("D:/students.xml");
读取XML文件内容实例
读取上面生成的XML文件,获取所有学生的信息:
// 加载XML文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("D:/students.xml");
// 获取根节点
XmlElement root = xmlDoc.DocumentElement;
// 获取所有Student节点
XmlNodeList studentNodes = root.SelectNodes("Student");
// 遍历节点输出信息
foreach (XmlNode node in studentNodes)
{
// 获取节点属性
string id = node.Attributes["Id"].Value;
// 获取子节点内容
string name = node.SelectSingleNode("Name").InnerText;
string age = node.SelectSingleNode("Age").InnerText;
Console.WriteLine($"学生ID:{id},姓名:{name},年龄:{age}");
}
修改XML节点实例
修改ID为1的学生年龄,将年龄更新为22:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("D:/students.xml");
// 查找ID为1的Student节点
XmlNode targetNode = xmlDoc.SelectSingleNode("/Students/Student[@Id='1']");
if (targetNode != null)
{
// 修改Age子节点的内容
XmlNode ageNode = targetNode.SelectSingleNode("Age");
if (ageNode != null)
{
ageNode.InnerText = "22";
}
// 保存修改
xmlDoc.Save("D:/students.xml");
Console.WriteLine("修改完成");
}
新增和删除XML节点实例
新增节点
新增一个ID为3的学生节点:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("D:/students.xml");
XmlElement root = xmlDoc.DocumentElement;
// 创建新学生节点
XmlElement newStudent = xmlDoc.CreateElement("Student");
newStudent.SetAttribute("Id", "3");
XmlElement newName = xmlDoc.CreateElement("Name");
newName.InnerText = "王五";
XmlElement newAge = xmlDoc.CreateElement("Age");
newAge.InnerText = "19";
newStudent.AppendChild(newName);
newStudent.AppendChild(newAge);
root.AppendChild(newStudent);
xmlDoc.Save("D:/students.xml");
Console.WriteLine("新增节点完成");
删除节点
删除ID为3的学生节点:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("D:/students.xml");
XmlElement root = xmlDoc.DocumentElement;
// 查找要删除的节点
XmlNode delNode = xmlDoc.SelectSingleNode("/Students/Student[@Id='3']");
if (delNode != null)
{
root.RemoveChild(delNode);
xmlDoc.Save("D:/students.xml");
Console.WriteLine("删除节点完成");
}
注意事项
- 操作XML文件时需要确保文件路径存在,否则会抛出文件未找到异常
- 使用
SelectSingleNode方法时,XPath表达式要符合规范,否则无法找到对应节点 - 修改XML内容后需要调用Save方法才会将改动写入文件,否则改动仅在内存中生效
- 读取节点内容前最好先判断节点是否为空,避免空引用异常
C#XML读写XML节点操作XmlDocument修改时间:2026-06-10 18:33:33