最常用且推荐的方式是使用XDocument(LINQ to XML)或XmlDocument;XDocument适合小到中等XML、语法简洁,XmlDocument配合XPath适合复杂嵌套与命名空间场景,均需注意空值防护。

用C#读取XML文件的特定节点数据,最常用且推荐的方式是使用 XmlDocument(适合小到中等XML)或 XDocument(LINQ to XML,更现代、简洁)。关键在于准确定位节点——可通过XPath表达式、元素名、属性值或层级关系来筛选。
用XDocument + LINQ快速获取单个节点内容
XDocument是.NET推荐的轻量级XML处理方式,配合LINQ语法可直观提取数据。
- 先用 XDocument.Load("path.xml") 加载文件
- 用 Descendants("节点名") 查找所有匹配元素,或用 Element("子元素名") 按层级查找
- 用 .FirstOrDefault() 安全取第一个匹配项,再用 .Value 或 .Attribute("name")?.Value 获取文本或属性
例如:读取 中id为101的书名:
XDocument doc = XDocument.Load("books.xml");
string title = doc.Descendants("book")
.FirstOrDefault(x => x.Attribute("id")?.Value == "101")?
.Element("title")?.Value;
// title == "C#入门"
用XmlDocument + XPath精准定位复杂路径
当XML结构嵌套深、条件多(如多层筛选、含命名空间),XPath更灵活可靠。
- 创建 XmlDocument 实例并 Load()
- 调用 SelectSingleNode("XPath表达式"),返回 XmlNode 对象
- XPath支持
//book[@id='101']/title、/root/category[1]/item[last()]/price等写法 - 注意:若XML有命名空间,需用 XmlNamespaceManager 注册前缀后传入
示例:
NetShop软件特点介绍: 1、使用ASP.Net(c#)2.0、多层结构开发 2、前台设计不采用任何.NET内置控件读取数据,完全标签化模板处理,加快读取速度3、安全的数据添加删除读取操作,利用存储过程模式彻底防制SQL注入式攻击4、前台架构DIV+CSS兼容IE6,IE7,FF等,有利于搜索引挚收录5、后台内置强大的功能,整合多家网店系统的功能,加以优化。6、支持三种类型的数据库:Acces
XmlDocument doc = new XmlDocument();
doc.Load("books.xml");
XmlNode node = doc.SelectSingleNode("//book[@id='101']/title");
string title = node?.InnerText; // 安全取值
安全读取:避免NullReferenceException
直接链式调用(如 doc.Root.Element("a").Element("b").Value)极易因某层缺失而抛异常。务必用空合并或条件判断。
- 用 ?.(空条件操作符)和 ??(空合并)组合,如
element?.Element("name")?.Value ?? "未知" - 用 Elements("name").FirstOrDefault() 替代 Element("name"),避免找不到时返回null
- 对属性也做同样防护:
elem.Attribute("type")?.Value
读取多个同名节点并遍历
如果目标节点有多个(如所有 ),用 Elements() 或 Descendants() 返回集合后遍历。
-
XDocument:用
doc.Root.Elements("author")或doc.Descendants("author") -
XmlDocument:用
doc.SelectNodes("//author")得到 XmlNodeList - 循环中统一用
node.InnerText(XmlDocument)或elem.Value(XDocument)取值
不复杂但容易忽略









