SelectNodes和SelectSingleNode是XmlNode类的XPath查询方法,仅适用于XmlDocument体系;需先加载XML、处理命名空间(用XmlNamespaceManager注册前缀),SelectSingleNode返回首个匹配节点(可能为null),SelectNodes返回只读XmlNodeList集合。

C#中使用SelectNodes和SelectSingleNode方法,前提是操作XML文档(如XmlDocument或XDocument),但要注意:这两个方法属于XmlNode类(即XmlDocument体系),不适用于LINQ to XML(XDocument)。下面以XmlDocument为例说明用法和关键细节。
确保XML文档已加载并支持XPath
这两个方法依赖XPath表达式进行节点查找,必须先用Load或LoadXml正确加载XML,且文档结构合法。若XML有命名空间,需配合XmlNamespaceManager注册前缀,否则XPath匹配会失败。
- 直接加载字符串:
doc.LoadXml(" "); - 加载文件:
doc.Load("data.xml"); - 未处理命名空间时,
//item可能返回空——即使节点存在
SelectSingleNode返回第一个匹配节点
该方法返回XmlNode类型,匹配不到时返回null,适合确定最多一个结果的场景(如找唯一配置项、根下特定子元素)。
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
- 基础用法:
XmlNode node = doc.SelectSingleNode("/root/item"); - 带属性筛选:
doc.SelectSingleNode("//item[@id='1']"); - 务必判空再访问属性或子节点,避免
NullReferenceException - 不支持默认命名空间简写;若XML含
xmlns="http://abc",必须声明前缀并使用
SelectNodes返回节点集合
返回XmlNodeList(只读集合),可用foreach或索引访问。注意它不是IEnumerable,不能直接用LINQ方法,需转成列表再处理。
- 获取所有同名节点:
XmlNodeList list = doc.SelectNodes("//item"); - 遍历示例:
foreach (XmlNode n in list) { Console.WriteLine(n.Attributes["id"]?.Value); } - 转换为List便于LINQ:
var nodes = list.Cast().ToList(); - 性能提示:XPath执行是即时的,多次调用相同XPath不会缓存,可提取为变量复用
命名空间处理是常见坑点
当XML包含默认命名空间(如),直接写/root查不到节点。必须用XmlNamespaceManager绑定前缀,并在XPath中使用该前缀。
- 注册命名空间:
var nsMgr = new XmlNamespaceManager(doc.NameTable); nsMgr.AddNamespace("ns", "http://myns"); - 带前缀查询:
doc.SelectSingleNode("/ns:root/ns:item", nsMgr); - 忽略命名空间的写法(不推荐):
"*[local-name()='item']",但可读性和性能较差









