C# 使用 XmlDocument 类读写 XML 文档详解

小石头
小石头
发布时间:2026-10-15 | 3人浏览过
原创

在 .NET 开发中,XmlDocument 是处理 XML 数据的常用 API,它支持 W3C XML DOM 标准。本文详细讲解如何使用该类加载不同来源的 XML、通过 XPath 表达式精准查询节点,以及从零构建并保存 XML 文档。

XmlDocument 概述与适用场景

XmlDocument 类将整个 XML 文档加载到内存中形成树状结构,便于随机访问和修改。由于这种机制会消耗较多内存,对于体积巨大的 XML 文件,建议改用基于流的 XmlReader 以节省资源。对于中小型 XML 文档,XmlDocument 提供了直观的对象模型进行操作。

第1步:加载 XML 文档

加载是将 XML 数据读入内存的关键步骤。XmlDocument 提供了三种主要的加载方式,分别适用于本地文件、字节流和字符串格式的数据。

第1.1步:从本地文件加载

当 XML 数据存储在文件中时,可直接使用文件名路径加载。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("XMLFile1.xml");

第1.2步:从二进制流加载

在处理数据库返回的二进制数据(如 Base64 编码的图片或文档)时,需将其转换为 MemoryStream 后再加载。

// 假设已从系统获取 Base64 字符串并转为字节数组 byte[] fileContent
MemoryStream ms = new MemoryStream(fileContent);
XmlDocument xmlDoc2 = new XmlDocument();
xmlDoc2.Load(ms);

第1.3步:从字符串加载

若 XML 数据以字符串形式存在(例如 JSON 解析后生成的 XML),可使用 LoadXml 方法。

string str = @"<Customers><Customer id='01' city='Beijing' country='China' name='Lenovo'/></Customers>";
XmlDocument xmlDoc3 = new XmlDocument();
xmlDoc3.LoadXml(str);

第2步:使用 XPath 查询节点

查询 XML 文档通常依赖 XPath 表达式。XmlDocument 主要提供两个查询方法:SelectNodes(返回所有匹配节点列表)和 SelectSingleNode(仅返回第一个匹配节点或 null)。

第2.1步:基础 XPath 语法简介

  • /:从根节点开始选取。
  • //:从当前节点选择文档中的后代节点。
  • @:选取属性。
  • []:用于过滤条件,如 [@id='01']。

第2.2步:执行节点查询示例

以下代码演示了如何遍历所有联系人的信息:

XmlNodeList nodelist = xmlDoc.SelectNodes("/Customers/Customer/Contact");
foreach (XmlNode node in nodelist)
{
    Console.WriteLine(node.OuterXml);
}

第2.3步:按条件精确查找

可以通过属性值或文本内容来定位特定节点:

// 查找 id 为 '02' 的客户
XmlNode node = xmlDoc.SelectSingleNode("/Customers/Customer[@id='02']");

// 查找文本内容为 'Li Li' 的联系人
XmlNode contactNode = xmlDoc.SelectSingleNode("/Customers/Customer/Contact[text()='Li Li']");

// 查找包含特定联系人的客户节点
XmlNode customerNode = xmlDoc.SelectSingleNode("/Customers/Customer[Contact/text()='Li Li']");

第2.4步:提取节点内容

获取节点数据时需注意区分 OuterXml、InnerXml 和 InnerText:

  • OuterXml:包含节点自身标签及其内部内容的完整字符串。
  • InnerXml:仅包含子节点的内容,不包含当前节点的标签。
  • InnerText:节点内部的所有纯文本内容。
  • Attributes["属性名"].Value:直接获取指定属性的值。

第3步:创建并保存 XML 文档

除了读取,还可以动态生成 XML 结构。创建过程包括声明版本、创建根元素、添加属性和子节点,最后保存到文件。

第3.1步:初始化与声明

var xmlDoc = new XmlDocument();
// 创建 XML 声明 
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));
// 创建根节点并加入文档
var el = xmlDoc.CreateElement("Customers");
xmlDoc.AppendChild(el);

第3.2步:构建元素与属性

依次创建子元素,并为每个元素设置属性值后追加到父节点下:

// 创建 Customer 元素及其属性
XmlElement elementCustomer = xmlDoc.CreateElement("Customer");
XmlAttribute attrID = xmlDoc.CreateAttribute("id");
attrID.Value = "01";
elementCustomer.Attributes.Append(attrID);

// 重复上述逻辑为 city, country, name 等属性赋值
el.AppendChild(elementCustomer);

// 创建 Contact 元素
XmlElement elementContact = xmlDoc.CreateElement("Contact");
elementContact.InnerText = "Li Li"; // 设置文本内容

// 为 Contact 添加属性
XmlAttribute attrGender = xmlDoc.CreateAttribute("gender");
attrGender.Value = "female";
elementContact.Attributes.Append(attrGender);

// 将 Contact 添加到 Customer,Customer 添加到 Root
elementCustomer.AppendChild(elementContact);

第3.3步:保存文档

调用 Save 方法将内存中的 XML 树持久化到硬盘:

xmlDoc.Save("test.xml");

以上就是 C# 使用 XmlDocument 类读写 XML 文档的详细内容,更多关于 C# 数据处理及 XML 操作的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表