C# 读写 XML 文件应用

在 C# 中,处理 XML 文件可以通过多种方式实现。最常用的方法是使用 System.Xml 命名空间下的类,比如 XmlDocumentXmlReaderXmlWriter 和 XDocument(LINQ to XML)。这些类提供了对 XML 文件的读取、写入、查询和修改功能。

本文将介绍如何使用 XmlDocument 和 XDocument 两种常见方法来读写 XML 文件。


1. 使用 XmlDocument 读写 XML 文件

XmlDocument 是传统的 DOM(文档对象模型)方式来处理 XML 文件。它将整个 XML 文件加载到内存中,形成一个树形结构,可以通过遍历和操作树节点来读取和修改 XML 数据。

1.1 读取 XML 文件

<?xml version="1.0" encoding="UTF-8" ?>
<bookstore>
    <book>
        <title lang="en">XML教程</title>
        <author>John Doe</author>
        <price>29.95</price>
    </book>
    <book>
        <title lang="zh">C#编程</title>
        <author>Jane Doe</author>
        <price>39.95</price>
    </book>
</bookstore>

C# 代码:读取 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");  // 获取所有 <book> 节点

        foreach (XmlNode book in books)
        {
            XmlNode title = book["title"];
            XmlNode author = book["author"];
            XmlNode price = book["price"];

            Console.WriteLine($"书名: {title.InnerText}, 作者: {author.InnerText}, 价格: {price.InnerText}");
        }
    }
}

输出

书名: XML教程, 作者: John Doe, 价格: 29.95
书名: C#编程, 作者: Jane Doe, 价格: 39.95

1.2 写入 XML 文件

using System;
using System.Xml;

class Program
{
    static void Main()
    {
        XmlDocument doc = new XmlDocument();
        
        // 创建 XML 声明
        XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
        doc.AppendChild(declaration);

        // 创建根节点
        XmlElement root = doc.CreateElement("bookstore");
        doc.AppendChild(root);

        // 创建第一个书籍节点
        XmlElement book1 = doc.CreateElement("book");

        XmlElement title1 = doc.CreateElement("title");
        title1.SetAttribute("lang", "en");
        title1.InnerText = "C#高级编程";

        XmlElement author1 = doc.CreateElement("author");
        author1.InnerText = "James Smith";

        XmlElement price1 = doc.CreateElement("price");
        price1.InnerText = "49.99";

        book1.AppendChild(title1);
        book1.AppendChild(author1);
        book1.AppendChild(price1);

        root.AppendChild(book1);

        // 保存到文件
        doc.Save("new_books.xml");
        Console.WriteLine("XML 文件已保存。");
    }
}

该代码将创建一个新的 XML 文件并保存。新的 XML 文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book>
        <title lang="en">C#高级编程</title>
        <author>James Smith</author>
        <price>49.99</price>
    </book>
</bookstore>


2. 使用 XDocument(LINQ to XML)读写 XML 文件

XDocument 是 LINQ to XML 的一部分,它提供了一种更简洁、更现代的方式来处理 XML。XDocument 基于 LINQ 查询语言,支持直接对 XML 进行查询、过滤和操作。

2.1 读取 XML 文件

<?xml version="1.0" encoding="UTF-8" ?>
<bookstore>
    <book>
        <title lang="en">XML教程</title>
        <author>John Doe</author>
        <price>29.95</price>
    </book>
    <book>
        <title lang="zh">C#编程</title>
        <author>Jane Doe</author>
        <price>39.95</price>
    </book>
</bookstore>

C# 代码:使用 LINQ 查询读取 XML 文件。

using System;
using System.Linq;
using System.Xml.Linq;

class Program
{
    static void Main()
    {
        XDocument doc = XDocument.Load("books.xml");

        var books = from b in doc.Descendants("book")
                    select new
                    {
                        Title = b.Element("title").Value,
                        Author = b.Element("author").Value,
                        Price = b.Element("price").Value
                    };

        foreach (var book in books)
        {
            Console.WriteLine($"书名: {book.Title}, 作者: {book.Author}, 价格: {book.Price}");
        }
    }
}

输出

书名: XML教程, 作者: John Doe, 价格: 29.95
书名: C#编程, 作者: Jane Doe, 价格: 39.95

2.2 写入 XML 文件

using System;
using System.Xml.Linq;

class Program
{
    static void Main()
    {
        XElement bookstore = new XElement("bookstore",
            new XElement("book",
                new XElement("title", new XAttribute("lang", "en"), "C#高级编程"),
                new XElement("author", "James Smith"),
                new XElement("price", "49.99")
            )
        );

        // 保存到文件
        bookstore.Save("new_books.xml");
        Console.WriteLine("XML 文件已保存。");
    }
}

该代码使用 XElement 创建 XML 并保存。保存后的 new_books.xml 文件内容如下:

<bookstore>
  <book>
    <title lang="en">C#高级编程</title>
    <author>James Smith</author>
    <price>49.99</price>
  </book>
</bookstore>


3. 总结

  • XmlDocument
    • 基于传统的 DOM(文档对象模型),适合需要操作整个 XML 文件的场景。
    • 代码结构相对复杂,但功能强大,适合复杂的 XML 处理任务。
    • 更适合较小的 XML 文档,因为它会将整个文件加载到内存中。
  • XDocument(LINQ to XML):
    • 基于 LINQ 查询,提供了更简洁的代码和灵活的查询功能。
    • 代码更简洁,适合需要频繁查询和修改 XML 的场景。
    • 在内存管理和性能上相对更高效,适用于大多数常见的 XML 操作。

选择使用 XmlDocument 还是 XDocument 取决于具体需求。如果你更习惯于传统的 DOM 方法,并且需要在内存中完整加载和处理 XML,可以选择 XmlDocument。如果你更喜欢使用 LINQ 查询来操作 XML,并且希望代码更简洁,XDocument 会是一个更好的选择。