导读:本期聚焦于小伙伴创作的《如何用.NET简单操作XML文件?有哪些常用方法和实现示例?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用.NET简单操作XML文件?有哪些常用方法和实现示例?》有用,将其分享出去将是对创作者最好的鼓励。

在.NET开发中,处理XML文件是非常普遍的需求,框架提供了多套成熟的API来满足不同场景下的XML操作要求,开发者可以根据实际需求和文件特点选择合适的方案。

如何用.NET简单操作XML文件?有哪些常用方法和实现示例?

常用XML操作方案对比

首先我们先了解几种主流的.NET XML操作方案的特点,方便后续选择:

方案名称核心类适用场景特点
DOM模型操作XmlDocument小体积XML文件,需要随机访问节点将整个XML加载到内存,操作直观,支持节点增删改查
Linq to XMLXDocument、XElement中等体积XML,需要简洁的查询和操作语法语法更简洁,支持Linq查询,代码可读性高
流式读取XmlReader大体积XML文件,不需要修改内容逐节点读取,内存占用极低,只能读取不能修改

使用XmlDocument操作XML

XmlDocument是基于DOM模型的经典XML操作类,适合处理结构不复杂的小文件,下面是创建、读取、修改XML的完整示例。

创建XML文件

使用XmlDocument创建包含学生信息的XML文件:

using System.Xml;

class XmlDocumentDemo
{
    static void CreateXml()
    {
        // 创建XmlDocument实例
        XmlDocument doc = new XmlDocument();
        // 创建XML声明
        XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "utf-8", null);
        doc.AppendChild(declaration);
        // 创建根节点
        XmlElement root = doc.CreateElement("Students");
        doc.AppendChild(root);
        // 创建第一个学生节点
        XmlElement student1 = doc.CreateElement("Student");
        // 添加id属性
        student1.SetAttribute("Id", "1");
        // 添加子节点
        XmlElement name1 = doc.CreateElement("Name");
        name1.InnerText = "张三";
        student1.AppendChild(name1);
        XmlElement age1 = doc.CreateElement("Age");
        age1.InnerText = "20";
        student1.AppendChild(age1);
        root.AppendChild(student1);
        // 创建第二个学生节点
        XmlElement student2 = doc.CreateElement("Student");
        student2.SetAttribute("Id", "2");
        XmlElement name2 = doc.CreateElement("Name");
        name2.InnerText = "李四";
        student2.AppendChild(name2);
        XmlElement age2 = doc.CreateElement("Age");
        age2.InnerText = "21";
        student2.AppendChild(age2);
        root.AppendChild(student2);
        // 保存文件
        doc.Save("students.xml");
    }
}

读取和修改XML

读取上面创建的XML文件,并修改第一个学生的年龄:

using System.Xml;

class XmlDocumentDemo
{
    static void ReadAndUpdateXml()
    {
        XmlDocument doc = new XmlDocument();
        // 加载XML文件
        doc.Load("students.xml");
        // 获取根节点
        XmlNode root = doc.DocumentElement;
        // 获取第一个Student节点
        XmlNode firstStudent = root.SelectSingleNode("Student[@Id='1']");
        if (firstStudent != null)
        {
            // 获取Age子节点
            XmlNode ageNode = firstStudent.SelectSingleNode("Age");
            if (ageNode != null)
            {
                // 修改年龄
                ageNode.InnerText = "22";
            }
        }
        // 保存修改
        doc.Save("students.xml");
        // 读取所有学生信息
        XmlNodeList students = root.SelectNodes("Student");
        foreach (XmlNode student in students)
        {
            string id = student.Attributes["Id"].Value;
            string name = student.SelectSingleNode("Name").InnerText;
            string age = student.SelectSingleNode("Age").InnerText;
            Console.WriteLine($"学生ID:{id},姓名:{name},年龄:{age}");
        }
    }
}

使用Linq to XML操作XML

Linq to XML是.NET后来推出的更简洁的XML操作方案,语法更符合现代C#开发习惯,支持Linq查询,下面是对应示例。

创建XML文件

using System.Xml.Linq;

class LinqToXmlDemo
{
    static void CreateXml()
    {
        // 直接构建XML结构
        XDocument doc = new XDocument(
            new XDeclaration("1.0", "utf-8", null),
            new XElement("Students",
                new XElement("Student",
                    new XAttribute("Id", "1"),
                    new XElement("Name", "张三"),
                    new XElement("Age", "20")
                ),
                new XElement("Student",
                    new XAttribute("Id", "2"),
                    new XElement("Name", "李四"),
                    new XElement("Age", "21")
                )
            )
        );
        // 保存文件
        doc.Save("students_linq.xml");
    }
}

查询和修改XML

using System.Xml.Linq;
using System.Linq;

class LinqToXmlDemo
{
    static void QueryAndUpdateXml()
    {
        // 加载XML文件
        XDocument doc = XDocument.Load("students_linq.xml");
        // 使用Linq查询年龄大于20的学生
        var olderStudents = doc.Descendants("Student")
            .Where(s => int.Parse(s.Element("Age").Value) > 20)
            .Select(s => new
            {
                Id = s.Attribute("Id").Value,
                Name = s.Element("Name").Value,
                Age = s.Element("Age").Value
            });
        Console.WriteLine("年龄大于20的学生:");
        foreach (var student in olderStudents)
        {
            Console.WriteLine($"ID:{student.Id},姓名:{student.Name},年龄:{student.Age}");
        }
        // 修改ID为1的学生年龄
        XElement targetStudent = doc.Descendants("Student")
            .FirstOrDefault(s => s.Attribute("Id").Value == "1");
        if (targetStudent != null)
        {
            targetStudent.Element("Age").Value = "22";
        }
        doc.Save("students_linq.xml");
    }
}

使用XmlReader读取大XML文件

如果XML文件体积很大,使用XmlDocument或XDocument会把整个文件加载到内存,可能导致内存溢出,这时候可以使用XmlReader逐节点读取。

using System.Xml;

class XmlReaderDemo
{
    static void ReadLargeXml()
    {
        // 创建XmlReader实例
        using (XmlReader reader = XmlReader.Create("large_students.xml"))
        {
            while (reader.Read())
            {
                // 判断当前节点是学生节点开始标签
                if (reader.NodeType == XmlNodeType.Element && reader.Name == "Student")
                {
                    string id = reader.GetAttribute("Id");
                    string name = "";
                    string age = "";
                    // 读取学生节点的子节点
                    while (reader.Read() && !(reader.NodeType == XmlNodeType.EndElement && reader.Name == "Student"))
                    {
                        if (reader.NodeType == XmlNodeType.Element)
                        {
                            if (reader.Name == "Name")
                            {
                                name = reader.ReadElementContentAsString();
                            }
                            else if (reader.Name == "Age")
                            {
                                age = reader.ReadElementContentAsString();
                            }
                        }
                    }
                    Console.WriteLine($"学生ID:{id},姓名:{name},年龄:{age}");
                }
            }
        }
    }
}

操作注意事项

  • 操作XML文件时要注意文件路径的正确性,避免文件不存在导致的异常
  • 使用XmlReader时只能读取不能修改,如果需要修改大文件,可以结合XmlWriter实现边读边写
  • 处理XML内容时要注意特殊字符的转义,比如<、>、&等字符需要正确转义,否则会导致XML格式错误
  • 如果XML文件包含命名空间,操作节点时需要带上对应的命名空间,否则可能无法匹配到节点

.NETXML操作XmlDocumentLinq_to_XMLXmlReader修改时间:2026-06-29 22:15:41

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。