linq to xml可在C#中高效查询和操作XML,支持从文件或字符串加载数据,使用XDocument.Load或Parse方法;通过Elements、Element和Attribute方法结合LINQ语法可实现标题提取、条件筛选及属性读取;支持命名空间处理,使XML操作简洁直观。

在C#中,使用LINQ to XML可以非常方便地查询和操作XML数据。它结合了LINQ的强大查询能力与轻量级的xml处理机制,语法简洁、易读性强。
加载XML数据
你可以从字符串、文件或流中加载XML数据。常用的是XDocument.Load(从文件)或XDocument.Parse(从字符串)。
示例XML:
<Books>
<Book ID=”1″>
<Title>C#入门经典</Title>
<Author>张三</Author>
<Price>69.00</Price>
</Book>
<Book ID=”2″>
<Title>深入理解LINQ</Title>
<Author>李四</Author>
<Price>89.50</Price>
</Book>
</Books>
加载方式:
var doc = XDocument.Load(“books.xml”);
// 或从字符串解析
var doc = XDocument.Parse(xmlString);
基本查询:获取所有书籍标题
使用Elements()和Element()方法结合LINQ查询。
var titles = from book in doc.Root.Elements(“Book”)
select book.Element(“Title”).Value;
foreach (var title in titles)
console.WriteLine(title);
带条件的查询:查找价格大于70的书籍
在查询中加入where子句进行筛选。
var expensiveBooks = from book in doc.Root.Elements(“Book”)
where decimal.Parse(book.Element(“Price”).Value) > 70
select new
{
Title = book.Element(“Title”).Value,
Author = book.Element(“Author”).Value,
Price = decimal.Parse(book.Element(“Price”).Value)
};
foreach (var book in expensiveBooks)
Console.WriteLine($”{book.Title} – {book.Author} : {book.Price}”);
查询属性:获取Book的ID
使用Attribute()方法读取节点属性。
var booksWithId = from book in doc.Root.Elements(“Book”)
select new
{
ID = book.Attribute(“ID”)?.Value,
Title = book.Element(“Title”).Value
};
注意:使用 ?. 可避免Attribute为NULL时报错。
处理命名空间(如有)
如果XML包含命名空间,需先定义XNamespace。
XNamespace ns = “http://example.com/books”;
var books = from book in doc.Root.Elements(ns + “Book”)
select book.Element(ns + “Title”).Value;
基本上就这些。LINQ to XML让XML查询变得像写sql一样自然,适合中小规模数据的读取和转换。