下面给你整理一份 C# 读写 XML 文件应用教程,涵盖基础概念、常用类、读取、写入、修改及示例,适合入门和实际项目使用。
📘 一、C# 操作 XML 的基础
C# 中操作 XML 文件常用两种方式:
XmlDocument(传统 DOM 方式)- 将整个 XML 加载到内存中
- 支持节点遍历、修改、插入、删除
- 适合小型或中型 XML 文件
XDocument/LINQ to XML(现代方式)- 基于 LINQ 查询和操作 XML
- 写法简洁,可读性高
- 支持函数式操作
📘 二、XML 文件示例
假设有一个文件 books.xml:
<?xml version="1.0" encoding="utf-8"?>
<library>
<book id="b001" category="Science">
<title>宇宙简史</title>
<author>Stephen Hawking</author>
<price currency="USD">68</price>
</book>
<book id="b002" category="History">
<title>人类简史</title>
<author>Yuval Noah Harari</author>
<price currency="USD">45</price>
</book>
</library>
📘 三、使用 XmlDocument 读取 XML
using System;
using System.Xml;
class Program
{
static void Main()
{
XmlDocument doc = new XmlDocument();
doc.Load("books.xml"); // 加载 XML 文件
XmlNodeList books = doc.GetElementsByTagName("book");
foreach (XmlNode book in books)
{
string id = book.Attributes["id"].Value;
string category = book.Attributes["category"].Value;
string title = book["title"].InnerText;
string author = book["author"].InnerText;
string price = book["price"].InnerText;
Console.WriteLine($"{id}, {category}, {title}, {author}, {price}");
}
}
}
GetElementsByTagName:获取指定标签的节点列表Attributes:访问元素属性InnerText:获取文本内容
📘 四、使用 XmlDocument 写入 XML
XmlDocument doc = new XmlDocument();
XmlElement library = doc.CreateElement("library");
doc.AppendChild(library);
XmlElement book = doc.CreateElement("book");
book.SetAttribute("id", "b003");
book.SetAttribute("category", "Technology");
XmlElement title = doc.CreateElement("title");
title.InnerText = "C# 编程基础";
book.AppendChild(title);
XmlElement author = doc.CreateElement("author");
author.InnerText = "阿杰";
book.AppendChild(author);
library.AppendChild(book);
doc.Save("books_new.xml"); // 保存 XML 文件
📘 五、使用 XDocument 读取 XML(LINQ 风格)
using System;
using System.Xml.Linq;
using System.Linq;
class Program
{
static void Main()
{
XDocument doc = XDocument.Load("books.xml");
var books = doc.Descendants("book")
.Select(b => new
{
Id = b.Attribute("id").Value,
Category = b.Attribute("category").Value,
Title = b.Element("title").Value,
Author = b.Element("author").Value,
Price = b.Element("price").Value
});
foreach (var book in books)
{
Console.WriteLine($"{book.Id}, {book.Category}, {book.Title}, {book.Author}, {book.Price}");
}
}
}
Descendants获取指定标签的所有子孙节点Element获取子元素Attribute获取属性
📘 六、使用 XDocument 写入 XML
XDocument doc = new XDocument(
new XElement("library",
new XElement("book",
new XAttribute("id", "b004"),
new XAttribute("category", "Math"),
new XElement("title", "线性代数"),
new XElement("author", "张三"),
new XElement("price", new XAttribute("currency","CNY"), "88")
)
)
);
doc.Save("books_linq.xml");
📘 七、XML 文件修改示例
// 修改 book b001 的价格
XDocument doc = XDocument.Load("books.xml");
var book = doc.Descendants("book")
.FirstOrDefault(b => b.Attribute("id").Value == "b001");
if(book != null)
{
book.Element("price").Value = "70"; // 修改价格
}
doc.Save("books_modified.xml");
📘 八、总结
- 选择方式:
- 小文件、需要频繁遍历、修改:
XmlDocument - 对象化、可读性高、LINQ 查询方便:
XDocument
- 小文件、需要频繁遍历、修改:
- 操作步骤:
- 加载 XML 文件
- 获取节点或属性
- 读取、修改、添加或删除元素
- 保存文件
- 实践建议:
- 读写大型 XML 文件可考虑
XmlReader/XmlWriter提高性能 - 使用 LINQ 可简化数据查询和筛选
- 读写大型 XML 文件可考虑