信息发布→ 登录 注册 退出

C#怎么使用LINQ to XML_C# LINQ to XML查询与操作教程

发布时间:2025-11-01

点击量:
LINQ to XML 提供简洁高效的 XML 处理方式,支持创建、查询、修改和保存 XML 文档。通过 XElement 和 XDocument 可构建或加载 XML,结合 LINQ 语法实现节点查询与投影,支持属性筛选、命名空间处理,并可添加、更新、删除节点后保存到文件,适用于配置管理与数据交换场景。

LINQ to XML 是 C# 中处理 XML 数据的强大工具,它结合了 LINQ 的查询能力与 XML 文档操作的灵活性。相比传统的 XML 处理方式(如 XmlDocument),LINQ to XML 更加简洁、易读,并支持函数式编程风格。下面介绍如何使用 C# 进行常见的 XML 查询与操作。

创建和加载 XML 文档

你可以从字符串、文件或直接构建的方式创建 XML 文档。

示例:创建一个简单的 XML 文档

XElement books = new XElement("Books",
    new XElement("Book",
        new XAttribute("Id", "1"),
        new XElement("Title", "C# 入门详解"),
        new XElement("Author", "张三"),
        new XElement("Price", "59.80")
    ),
    new XElement("Book",
        new XAttribute("Id", "2"),
        new XElement("Title", "LINQ 实战"),
        new XElement("Author", "李四"),
        new XElement("Price", "68.00")
    )
);

从文件加载 XML

XDocument doc = XDocument.Load("books.xml");

从字符串解析 XML

string xmlStr = @"C# 高级编程";
XElement root = XElement.Parse(xmlStr);

使用 LINQ 查询 XML 数据

你可以使用标准 LINQ 查询语法筛选和投影 XML 节点。

查询所有书籍标题

var titles = from book in books.Elements("Book")
             select book.Element("Title").Value;

foreach (var title in titles) { Console.WriteLine(title); }

查找价格大于 60 的书籍

var expensiveBooks = from book in books.Elements("Book")
                     let price = double.Parse(book.Element("Price").Value)
                     where price > 60
                     select new
                     {
                         Title = book.Element("Title").Value,
                         Price = price
                     };

foreach (var b in expensiveBooks) { Console.WriteLine($"{b.Title}: {b.Price}"); }

通过属性查询特定书籍

var bookById = books.Elements("Book")
                    .Where(b => b.Attribute("Id")?.Value == "1")
                    .FirstOrDefault();

if (bookById != null) { Console.WriteLine("找到书籍: " + bookById.Element("Title").Value); }

修改和保存 XML

你可以添加、更新或删除节点,并将结果保存到文件。

添加新书籍

books.Add(new XElement("Book",
    new XAttribute("Id", "3"),
    new XElement("Title", "ASP.NET 核心开发"),
    new XElement("Author", "王五"),
    new XElement("Price", "75.00")
));

更新某本书的价格

var bookToUpdate = books.Elements("Book")
                        .FirstOrDefault(b => b.Element("Title")?.Value == "C# 入门详解");
if (bookToUpdate != null)
{
    bookToUpdate.Element("Price").Value = "55.00";
}

删除某本书

var bookToDelete = books.Elements("Book")
                        .FirstOrDefault(b => (string)b.Attribute("Id") == "2");
bookToDelete?.Remove();

保存到文件

doc.Save("updated_books.xml"); // 如果是 XDocument
// 或者
books.Save("new_books.xml");   // 如果是 XElement 且需要根节点

处理命名空间

当 XML 包含命名空间时,查询需显式指定。

XNamespace ns = "http://example.com/books";
var booksWithNs = from book in root.Elements(ns + "Book")
                  select book.Element(ns + "Title").Value;

基本上就这些常用操作。LINQ to XML 让 XML 处理变得直观高效,适合配置文件、数据交换等场景。熟练掌握后能大幅提升开发效率。

标签:# 你可以  # 如何使用  # 并可  # 或删除  # 并将  # 适用于  # 数据交换  # 加载  # 本书  # 文档  # c#  # linq  # 字符串  # xml  # 命名空间  # .net  # 字符串解析  # 配置文件  # 工具  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!