在C#开发里,操作XML是常见任务。面对同样的数据检索需求,我们可以选择LINQ to XML,也可以使用XPath表达式。很多同学关心它们到底谁更快,本文从原理、代码写法和实测角度来做一次清晰对比。

基本查询方式差异
LINQ to XML通过XDocument和XElement把XML加载为对象树,再用标准查询语法过滤。XPath则依赖XPathNavigator或XElement.XPathSelectElements方法执行路径表达式。
LINQ to XML示例
using System;
using System.Linq;
using System.Xml.Linq;
class Demo
{
static void Main()
{
// 加载XML字符串
XDocument doc = XDocument.Parse("<root><item id='1'>A</item><item id='2'>B</item></root>");
// 使用LINQ查询id为2的节点
var result = doc.Descendants("item")
.Where(e => (string)e.Attribute("id") == "2")
.FirstOrDefault();
Console.WriteLine(result?.Value);
}
}
XPath示例
using System;
using System.Xml.Linq;
class Demo
{
static void Main()
{
XDocument doc = XDocument.Parse("<root><item id='1'>A</item><item id='2'>B</item></root>");
// 使用XPath选取节点
var result = doc.XPathSelectElement("//item[@id='2']");
Console.WriteLine(result?.Value);
}
}
性能影响因素
查询速度并不是由技术名称决定的,而和下面几点有关:
- XML文档规模:节点越多,遍历成本越高
- 表达式复杂度:嵌套条件会拉长执行时间
- 是否编译XPath:未编译的表达式每次都要解析
- LINQ延迟执行:真正枚举时才计算,可避免多余开销
简单测试对比
我们用一万条item做基准,重复查询一千次,得到大致数据:
| 查询方式 | 平均耗时(ms) | 说明 |
|---|---|---|
| LINQ to XML | 120 | 延迟执行,代码易读 |
| XPath未编译 | 210 | 每次解析表达式 |
| XPath已编译 | 95 | 使用XPathExpression缓存 |
如何选择
如果团队熟悉C#且查询逻辑复杂,用LINQ to XML更顺手。若只是简单路径提取并且追求极限性能,可编译XPath表达式。注意在正文里提到HTML标签时要转义,例如写<input>而不是真实标签。
结论:没有绝对赢家,按场景选。小文件随便用,大文件建议编译XPath或写好LINQ条件。
编译XPath示例
using System;
using System.Xml.XPath;
using System.Xml.Linq;
class Demo
{
static void Main()
{
XDocument doc = XDocument.Parse("<root><item id='1'>A</item></root>");
// 编译XPath提升性能
var expr = XPathExpression.Compile("//item[@id='1']");
var nav = doc.CreateNavigator();
var node = nav.SelectSingleNode(expr);
Console.WriteLine(node?.Value);
}
}
C#LINQ_to_XMLXPathXML查询性能对比修改时间:2026-07-25 11:03:24