在C#里处理XML数据,最常用的两类API是XmlDocument和XDocument。前者来自System.Xml命名空间,采用标准DOM模型;后者来自System.Xml.Linq,配合LINQ使用更顺手。下面通过基础示例看看它们各自怎么用。
使用XmlDocument解析XML
XmlDocument需要先把整个XML文件加载到内存,再通过SelectSingleNode或SelectNodes方法查找节点。
using System;
using System.Xml;
class Program
{
static void Main()
{
// 加载XML文件
XmlDocument doc = new XmlDocument();
doc.Load("book.xml");
// 获取根节点下的第一个book节点
XmlNode node = doc.SelectSingleNode("/library/book");
if (node != null)
{
// 读取title子节点内容
string title = node.SelectSingleNode("title").InnerText;
// 读取属性id
string id = node.Attributes["id"].Value;
Console.WriteLine("书名:" + title + ", 编号:" + id);
}
}
}
使用XDocument解析XML
XDocument支持LINQ查询,代码更直观,也更容易筛选数据。
using System;
using System.Linq;
using System.Xml.Linq;
class Program
{
static void Main()
{
// 加载XML文件
XDocument doc = XDocument.Load("book.xml");
// 用LINQ查询所有book节点
var books = from b in doc.Descendants("book")
select new
{
Title = b.Element("title")?.Value,
Id = b.Attribute("id")?.Value
};
foreach (var b in books)
{
Console.WriteLine("书名:" + b.Title + ", 编号:" + b.Id);
}
}
}
两者如何选择
如果你的项目基于旧框架,或者需要严格按DOM方式操作节点,可以用XmlDocument。若使用.NET Framework 3.5以上或.NET Core,推荐XDocument,写起来更省事。
| 对比项 | XmlDocument | XDocument |
|---|---|---|
| 命名空间 | System.Xml | System.Xml.Linq |
| 查询方式 | XPath | LINQ |
| 代码简洁度 | 一般 | 较高 |
注意转义字符
在C#字符串里写XML路径或内容时,如果包含<input>这类标签名,要注意上下文不会把它当成真实标签处理。用XDocument读到的内容本身已经是正确的文本。
小提示:处理大文件时,两种方案都会占用较多内存,可考虑XmlReader做流式读取。
C#XmlDocumentXDocument修改时间:2026-07-28 23:54:46