C# Linq to XML怎么用 Linq查询XML文件方法

来源:微信开发网作者:Robin头衔:草根站长
导读:本期聚焦于小伙伴创作的《C# Linq to XML怎么用 Linq查询XML文件方法》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C# Linq to XML怎么用 Linq查询XML文件方法》有用,将其分享出去将是对创作者最好的鼓励。

C#中的Linq to XML是.NET框架提供的XML处理技术,它将XML文档抽象为可编程的对象模型,结合Linq的查询能力,可以非常方便地完成XML文件的加载、解析、查询和修改操作,相比传统的XML DOM操作更加简洁直观。

C# Linq to XML怎么用 Linq查询XML文件方法

Linq to XML核心类介绍

使用Linq to XML前需要先了解几个核心类,这些类都位于System.Xml.Linq命名空间下:

  • XDocument:表示整个XML文档,可用于加载、保存XML文件,也可以直接构造XML文档结构。
  • XElement:表示XML中的一个元素节点,是操作XML最常用的类,可获取元素的属性、子元素、文本内容等。
  • XAttribute:表示XML元素的一个属性。
  • XNamespace:用于处理XML命名空间相关操作。

加载XML文件

使用Linq to XML查询XML文件的第一步是加载XML内容,支持从文件路径、字符串、流等多种来源加载,以下是加载本地XML文件的示例:

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

class Program
{
    static void Main()
    {
        // 加载本地XML文件,路径替换为实际文件路径
        XDocument doc = XDocument.Load(@"D:test.xml");
        // 也可以从XML字符串加载
        // string xmlStr = "<root><user id="1">张三</user></root>";
        // XDocument doc = XDocument.Parse(xmlStr);
        Console.WriteLine("XML加载完成");
    }
}

基础Linq查询XML方法

加载XML文档后,就可以通过Linq语法查询其中的元素和属性,以下是几种常见的查询场景。

查询所有指定名称的元素

假设我们有如下结构的XML文件,保存为test.xml:

<?xml version="1.0" encoding="utf-8"?>
<users>
  <user id="1" age="20">张三</user>
  <user id="2" age="25">李四</user>
  <user id="3" age="22">王五</user>
</users>

查询所有user元素的代码如下:

// 获取所有user元素
var allUsers = doc.Descendants("user");
foreach (var user in allUsers)
{
    Console.WriteLine($"用户名:{user.Value},ID:{user.Attribute("id").Value}");
}

这里Descendants方法会返回文档中所有指定名称的后代元素,不管嵌套层级。

带条件的Linq查询

如果需要根据元素的属性或文本内容筛选数据,可以结合Linq的where子句实现:

// 查询年龄大于20岁的用户
var adultUsers = doc.Descendants("user")
    .Where(u => int.Parse(u.Attribute("age").Value) > 20);
foreach (var user in adultUsers)
{
    Console.WriteLine($"成年用户:{user.Value},年龄:{user.Attribute("age").Value}");
}

// 查询用户名为李四的元素
var liSi = doc.Descendants("user")
    .FirstOrDefault(u => u.Value == "李四");
if (liSi != null)
{
    Console.WriteLine($"找到李四,ID:{liSi.Attribute("id").Value}");
}

查询元素的属性和子元素

如果XML结构更复杂,包含嵌套子元素,也可以通过Linq查询提取对应内容,比如以下XML:

<?xml version="1.0" encoding="utf-8"?>
<orders>
  <order id="1001">
    <product>笔记本电脑</product>
    <price>5999</price>
    <count>2</count>
  </order>
  <order id="1002">
    <product>鼠标</product>
    <price>99</price>
    <count>5</count>
  </order>
</orders>

查询订单总价大于100的订单信息:

var highValueOrders = doc.Descendants("order")
    .Where(o => int.Parse(o.Element("price").Value) * int.Parse(o.Element("count").Value) > 100)
    .Select(o => new
    {
        OrderId = o.Attribute("id").Value,
        Product = o.Element("product").Value,
        TotalPrice = int.Parse(o.Element("price").Value) * int.Parse(o.Element("count").Value)
    });
foreach (var order in highValueOrders)
{
    Console.WriteLine($"订单ID:{order.OrderId},商品:{order.Product},总价:{order.TotalPrice}");
}

查询结果的转换与处理

Linq to XML查询得到的结果可以继续用Linq的其他操作处理,比如排序、分组、转换等:

// 按年龄升序排序用户
var sortedUsers = doc.Descendants("user")
    .OrderBy(u => int.Parse(u.Attribute("age").Value))
    .Select(u => new
    {
        Name = u.Value,
        Age = u.Attribute("age").Value
    });
foreach (var user in sortedUsers)
{
    Console.WriteLine($"姓名:{user.Name},年龄:{user.Age}");
}

注意事项

  • 操作XML元素属性或子元素时,需要先判断是否存在,避免空引用异常,比如用u.Attribute("age")?.Value的方式获取可选属性。
  • 如果XML包含命名空间,查询时需要带上对应的命名空间,否则会查询不到结果。
  • 处理大XML文件时,优先使用Descendants而不是ElementsElements只会查询直接子元素,层级不对会导致查询失败。

C#Linq_to_XMLXML查询XML解析修改时间:2026-06-14 21:15:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。