SelectNodes 返回 XmlNodeList(含零个或多个节点),SelectSingleNode 返回首个匹配 XmlNode 或 null;二者均需处理空值与命名空间。

SelectNodes 和 SelectSingleNode 是 .NET 中 XmlDocument 类提供的两个 XPath 查询方法,用于从 XML 文档中查找节点。它们不返回原始字符串或值,而是返回 XmlNodeList 或 XmlNode 对象,需进一步提取内容(如 InnerText、Attributes 等)。
SelectNodes:获取匹配的所有节点
返回一个 XmlNodeList,包含所有符合 XPath 表达式的节点。即使只匹配一个或零个节点,也始终返回列表(空列表或含多个项)。
- 适用于需要遍历多个同名元素的场景,比如读取所有
或所有 - 调用后应检查
Count属性,避免对空列表做索引访问引发异常 - 常见写法:
var nodes = doc.SelectNodes("//book/title");—— 查找所有元素(无论嵌套多深)
SelectSingleNode:只取第一个匹配节点
返回第一个匹配的 XmlNode,若无匹配则返回 null。适合确定唯一存在的节点(如根下的 或某个 ID 唯一的元素)。
HTShop网上购物系统
HTShop网上购物系统由恒天网络科技有限公司根据国际先进技术和国内商务特点自主版权开发的一款具有强大功能的B2C电子商务网上购物平台。HTShop以国际上通用流行的B/S(浏览器/服务器)模式进行设计,采用微软公司的ASP.NET(C#)技术构建而成。 2007-11-10 HTShop CS 通用标准版 v1.1.11.10 更新内容自由更换模版功能开放 修改了购买多款商品,会员中心订单只显示
- 必须判空再访问属性或子节点,否则可能触发
NullReferenceException - 注意它不保证“最深”或“最近”,而是按文档顺序返回首个匹配项
- 示例:
var node = doc.SelectSingleNode("/root/user[@id='123']/name");—— 查找 id=123 的 user 下的 name
XPath 表达式要点
两个方法都依赖 XPath 语法,常见用法包括:
-
/root/child:从根开始的绝对路径 -
//item:任意位置的(深度无关) -
./price:当前节点下的直接子节点 -
[@attr='value']:带属性筛选,如user[@active='true'] -
[1]:索引(XPath 从 1 开始),如//book[1]取第一个 book
命名空间处理(常被忽略)
如果 XML 含命名空间(如 xmlns="http://example.com/ns"),直接写 //book 会查不到节点。必须注册命名空间前缀并使用:
- 创建
XmlNamespaceManager,添加前缀映射:mgr.AddNamespace("x", "http://example.com/ns"); - 查询时带上前缀:
doc.SelectNodes("//x:book", mgr) - 否则方法返回空结果,且不报错,容易误判为数据缺失