C#怎么解析XML文档?如何使用XmlDocument实现XML解析

来源:草根站长作者:缅甸程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《C#怎么解析XML文档?如何使用XmlDocument实现XML解析》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么解析XML文档?如何使用XmlDocument实现XML解析》有用,将其分享出去将是对创作者最好的鼓励。

在C#的开发场景中,XML文档常被用来存储配置信息、传输结构化数据,解析XML文档是开发者需要掌握的基础技能。XmlDocument是.NET Framework提供的用于处理XML文档的核心类,基于DOM(文档对象模型)实现,能够将整个XML文档加载到内存中,方便开发者通过节点操作的方式读取和修改XML内容。

XmlDocument基础使用步骤

使用XmlDocument解析XML文档的核心流程分为三步:加载XML内容、获取目标节点、读取节点信息。下面先介绍XML文档的加载方式。

1. 加载XML文档

XmlDocument支持从文件路径、字符串、流三种方式加载XML内容,常用的是从文件路径加载和从字符串加载。

using System.Xml;

class Program
{
    static void Main()
    {
        // 创建XmlDocument实例
        XmlDocument xmlDoc = new XmlDocument();
        
        // 方式1:从本地文件路径加载XML
        xmlDoc.Load("test.xml");
        
        // 方式2:从XML字符串加载
        string xmlStr = "<?xml version="1.0" encoding="utf-8"?><root><user id="1">张三</user></root>";
        xmlDoc.LoadXml(xmlStr);
    }
}

2. 获取XML节点

加载XML后,可以通过SelectSingleNode获取单个节点,通过SelectNodes获取多个匹配的节点,这两个方法支持XPath语法查询节点。

using System.Xml;

class Program
{
    static void Main()
    {
        XmlDocument xmlDoc = new XmlDocument();
        string xmlStr = "<?xml version="1.0" encoding="utf-8"?>" +
                        "<root>" +
                        "<user id="1">张三</user>" +
                        "<user id="2">李四</user>" +
                        "</root>";
        xmlDoc.LoadXml(xmlStr);
        
        // 获取根节点
        XmlNode rootNode = xmlDoc.SelectSingleNode("root");
        
        // 获取所有user节点
        XmlNodeList userNodes = xmlDoc.SelectNodes("root/user");
        
        // 获取id为1的user节点
        XmlNode targetUser = xmlDoc.SelectSingleNode("root/user[@id='1']");
    }
}

3. 读取节点内容和属性

获取节点后,可以通过InnerText属性获取节点的文本内容,通过Attributes集合获取节点的属性值。

using System.Xml;

class Program
{
    static void Main()
    {
        XmlDocument xmlDoc = new XmlDocument();
        string xmlStr = "<?xml version="1.0" encoding="utf-8"?>" +
                        "<root>" +
                        "<user id="1">张三</user>" +
                        "</root>";
        xmlDoc.LoadXml(xmlStr);
        
        XmlNode userNode = xmlDoc.SelectSingleNode("root/user");
        // 读取节点文本内容
        string userName = userNode.InnerText;
        // 读取节点id属性
        string userId = userNode.Attributes["id"].Value;
    }
}

常见操作示例

遍历所有子节点

当需要读取XML中同层级的多个节点时,可以遍历XmlNodeList集合获取每个节点的信息。

using System.Xml;

class Program
{
    static void Main()
    {
        XmlDocument xmlDoc = new XmlDocument();
        string xmlStr = "<?xml version="1.0" encoding="utf-8"?>" +
                        "<root>" +
                        "<user id="1">张三</user>" +
                        "<user id="2">李四</user>" +
                        "<user id="3">王五</user>" +
                        "</root>";
        xmlDoc.LoadXml(xmlStr);
        
        XmlNodeList userNodes = xmlDoc.SelectNodes("root/user");
        foreach (XmlNode node in userNodes)
        {
            string id = node.Attributes["id"].Value;
            string name = node.InnerText;
            // 输出每个用户的id和名称
        }
    }
}

修改XML节点内容

XmlDocument也支持修改XML节点的内容和属性,修改完成后可以通过Save方法将修改后的内容保存到文件或流中。

using System.Xml;

class Program
{
    static void Main()
    {
        XmlDocument xmlDoc = new XmlDocument();
        string xmlStr = "<?xml version="1.0" encoding="utf-8"?>" +
                        "<root>" +
                        "<user id="1">张三</user>" +
                        "</root>";
        xmlDoc.LoadXml(xmlStr);
        
        XmlNode userNode = xmlDoc.SelectSingleNode("root/user");
        // 修改节点文本内容
        userNode.InnerText = "张三_new";
        // 修改节点属性
        userNode.Attributes["id"].Value = "100";
        
        // 保存到本地文件
        xmlDoc.Save("new_test.xml");
    }
}

注意事项

  • 加载XML时如果XML格式不正确,会抛出异常,建议加载时使用try-catch块捕获异常。
  • 使用XPath查询节点时,如果路径不存在,SelectSingleNode会返回null,直接操作返回值会出现空引用异常,需要先做非空判断。
  • XmlDocument会将整个XML文档加载到内存中,如果XML文档体积过大,可能会导致内存占用过高,此时可以考虑使用XmlReader流式解析。

C#XmlDocumentXML解析XML文档修改时间:2026-06-26 22:54:39

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