C# 使用 XmlDocument 类读写 XML 文档详解
在 .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 操作的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









