下面给你整理一份 C# 读写 XML 文件应用教程,涵盖基础概念、常用类、读取、写入、修改及示例,适合入门和实际项目使用。


📘 一、C# 操作 XML 的基础

C# 中操作 XML 文件常用两种方式:

  1. XmlDocument(传统 DOM 方式)
    • 将整个 XML 加载到内存中
    • 支持节点遍历、修改、插入、删除
    • 适合小型或中型 XML 文件
  2. 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");


📘 八、总结

  1. 选择方式
    • 小文件、需要频繁遍历、修改:XmlDocument
    • 对象化、可读性高、LINQ 查询方便:XDocument
  2. 操作步骤
    • 加载 XML 文件
    • 获取节点或属性
    • 读取、修改、添加或删除元素
    • 保存文件
  3. 实践建议
    • 读写大型 XML 文件可考虑 XmlReader/XmlWriter 提高性能
    • 使用 LINQ 可简化数据查询和筛选