.NET中如何使用LINQ to XML操作XML

LINQ to XML 提供简洁方式操作 XML,使用 XElement 和 XDocument 创建结构,如书籍列表;通过 LINQ 查询语法或方法语法读取数据,支持 Where、Select 等操作;可修改元素值、属性,添加或删除节点;用 Load 加载文件,Save 保存输出,适合中小规模场景。

LINQ to XML 是 .NET 中一种轻量且直观的操作 XML 的方式,它结合了 LINQ 的查询能力与 XML 文档的内存表示,让创建、读取、修改和保存 XML 变得非常简洁。下面介绍如何使用 LINQ to XML 进行常见操作。

创建 XML 文档

使用 XElementXDocument 可以轻松构建 XML 结构。

  • XElement 表示一个 XML 元素,可以嵌套其他元素
  • XDocument 包含 XML 声明、文档类型等信息,可选使用

示例:创建一个简单的书籍列表

XElement books = new XElement("Books",
    new XElement("Book",
        new XAttribute("Id", "1"),
        new XElement("Title", "C# 编程指南"),
        new XElement("Author", "张三")
    ),
    new XElement("Book",
        new XAttribute("Id", "2"),
        new XElement("Title", "深入理解 LINQ"),
        new XElement("Author", "李四")
    )
);

调用 books.ToString() 即可输出格式化后的 XML 字符串。

读取和查询 XML

使用 LINQ 查询语法或方法语法可以从 XML 中提取数据。

假设已有上面创建的 books 对象:

var query = from book in books.Elements("Book")
            where (string)book.Element("Author") == "张三"
            select (string)book.Element("Title");

foreach (string title in query) { Console.WriteLine(title); }

也可以用方法语法:

var titles = books.Elements("Book")
                   .Where(b => b.Element("Author")?.Value == "张三")
                   .Select(b => b.Element("Title")?.Value);

注意使用 ?. 操作符防止空引用异常。

修改 XML 内容

LINQ to XML 支持直接修改元素值、属性或结构。

  • 修改元素值:element.Value = "新值"
  • 修改属性:element.SetAttributeValue("name", "new value")
  • 添加子元素:element.Add(new XElement("NewChild", "内容"))
  • 删除元素:element.Remove()

示例:为第一本书添加页数

var firstBook = books.Elements("Book").First();
firstBook.Add(new XElement("Pages", 500));

加载和保存 XML 文件

从文件读取 XML 使用 XElement.Load()XDocument.Load()

XElement loadedBooks = XElement.Load("books.xml");

将 XML 保存到文件:

books.Save("output.xml");

支持路径字符串或 Stream,也支持异步加载/保存(.NET 4.0+)。

基本上就这些。LINQ to XML 让处理 XML 像操作对象一样自然,适合中小规模数据场景。不复杂但容易忽略细节,比如大小写敏感、命名空间处理等,使用时注意一致性。