C#中的SelectNodes和SelectSingleNode用法

发布时间 - 2026-01-14 00:00:00    点击率:
SelectNodes 返回 XmlNodeList(含零个或多个节点),SelectSingleNode 返回首个匹配 XmlNode 或 null;二者均需处理空值与命名空间。

SelectNodesSelectSingleNode 是 .NET 中 XmlDocument 类提供的两个 XPath 查询方法,用于从 XML 文档中查找节点。它们不返回原始字符串或值,而是返回 XmlNodeListXmlNode 对象,需进一步提取内容(如 InnerTextAttributes 等)。

SelectNodes:获取匹配的所有节点

返回一个 XmlNodeList,包含所有符合 XPath 表达式的节点。即使只匹配一个或零个节点,也始终返回列表(空列表或含多个项)。

  • 适用于需要遍历多个同名元素的场景,比如读取所有 或所有
  • 调用后应检查 Count 属性,避免对空列表做索引访问引发异常
  • 常见写法:var nodes = doc.SelectNodes("//book/title"); —— 查找所有 元素(无论嵌套多深)

SelectSingleNode:只取第一个匹配节点

返回第一个匹配的 XmlNode,若无匹配则返回 null。适合确定唯一存在的节点(如根下的 或某个 ID 唯一的元素)。

  • 必须判空再访问属性或子节点,否则可能触发 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)
  • 否则方法返回空结果,且不报错,容易误判为数据缺失


# node  # c#  # .net  # NULL  # count  # 命名空间  # xml  # 字符串  # var  # 对象  # http  # 第一个  # 多个  # 首个  # 文档  # 遍历  # 适用于  # 报错  # 它不  # 最深  # 若无 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  ,南京靠谱的征婚网站?  如何在Tomcat中配置并部署网站项目?  如何在香港服务器上快速搭建免备案网站?  如何续费美橙建站之星域名及服务?  如何快速搭建支持数据库操作的智能建站平台?  企业网站制作这些问题要关注  IOS倒计时设置UIButton标题title的抖动问题  微信小程序 配置文件详细介绍  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  如何选择可靠的免备案建站服务器?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  JS中对数组元素进行增删改移的方法总结  详解Oracle修改字段类型方法总结  打造顶配客厅影院,这份100寸电视推荐名单请查收  图册素材网站设计制作软件,图册的导出方式有几种?  如何快速搭建安全的FTP站点?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  如何在建站主机中优化服务器配置?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  手机软键盘弹出时影响布局的解决方法  jQuery 常见小例汇总  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  动图在线制作网站有哪些,滑动动图图集怎么做?  电商网站制作价格怎么算,网上拍卖流程以及规则?  清除minerd进程的简单方法  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  在centOS 7安装mysql 5.7的详细教程  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  如何在云主机快速搭建网站站点?  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel怎么清理缓存_Laravel optimize clear命令详解  微信小程序 input输入框控件详解及实例(多种示例)  Android Socket接口实现即时通讯实例代码  *服务器网站为何频现安全漏洞?  如何在宝塔面板创建新站点?  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  再谈Python中的字符串与字符编码(推荐)  如何自定义建站之星模板颜色并下载新样式?  在线制作视频的网站有哪些,电脑如何制作视频短片?  三星、SK海力士获美批准:可向中国出口芯片制造设备  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  微信小程序 wx.uploadFile无法上传解决办法  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  javascript读取文本节点方法小结