C#如何遍历XDocument的所有子孙节点 Descendants()方法

发布时间 - 2026-01-13 00:00:00    点击率:
XDocument.Descendants()返回所有子孙元素节点(IEnumerable),仅含元素,忽略文本、注释等非元素节点;支持按名称或命名空间筛选,区别于仅查直接子元素的Elements()。

XDocument.Descendants() 方法用于获取文档中所有子孙元素节点(即递归查找所有嵌套层级的 ),它返回一个 IEnumerable,不包含文本节点、注释、处理指令等非元素节点。

Descendants() 只返回 XElement 节点

该方法只遍历并返回 XML 中的**元素(Element)节点**,忽略文本内容(XText)、CDATA、注释(XComment)、处理指令(XProcessingInstruction)等。如果需要访问所有类型节点(包括文本),需用 DescendantNodes() 或递归遍历 Node.Nodes()

  • doc.Descendants() → 所有 元素,无论嵌套多深
  • doc.DescendantNodes() → 所有节点:元素、文本、注释、空白等
  • doc.Root?.DescendantsAndSelf() → 包含根元素自身的所有后代元素(含自己)

按名称筛选特定子孙元素

可传入元素名(字符串或 XName)来只获取指定名称的子孙元素:

  • doc.Descendants("Book") → 所有名为 的元素(不管在哪一层)
  • doc.Descendants(ns + "Title") → 支持命名空间,nsXNamespace 实例
  • 结果仍是 IEnumerable,可链式调用 .Where().Select() 等 LINQ 方法

遍历并处理每个子孙元素

典型用法是 foreach 遍历,或结合 LINQ 查询属性/内容:

  • foreach (var el in doc.Descendants()) { Console.WriteLine(el.Name); }
  • var titles = doc.Descendants("Title").Select(t => t.Value).ToList();
  • var emptyElements = doc.Descendants().Where(e => !e.HasElements && string.IsNullOrWhiteSpace(e.Value));

注意 Descendants() 和 Elements() 的区别

Elements() 只返回**直接子元素**(一层深度),而 Descendants() 是**全部后代元素**(任意深度):

  • root.Elements()(仅一级)
  • root.Descendants(), , (所有层级)
  • 若想获取所有节点(含文本),改用 root.DescendantNodes(),再用 node.GetType() 判断类型


# node  # 区别  # c#  # String  # foreach  # 命名空间  # select  # xml  # 字符串  # 递归  # var  # console  # linq  # 遍历  # 链式  # 仍是  # 再用  # 不包含  # 需用  # 多深  # 文档  # ul 


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


相关推荐: Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  高性价比服务器租赁——企业级配置与24小时运维服务  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  如何用AI帮你把自己的生活经历写成一个有趣的故事?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何快速打造个性化非模板自助建站?  如何彻底卸载建站之星软件?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  Laravel如何创建自定义Artisan命令?(代码示例)  Android okhttputils现在进度显示实例代码  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何用搬瓦工VPS快速搭建个人网站?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何在阿里云域名上完成建站全流程?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  如何正确选择百度移动适配建站域名?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何在腾讯云服务器快速搭建个人网站?  如何用VPS主机快速搭建个人网站?  python中快速进行多个字符替换的方法小结  如何基于云服务器快速搭建网站及云盘系统?  浅谈javascript alert和confirm的美化  如何在建站之星绑定自定义域名?  jQuery中的100个技巧汇总  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Swift中swift中的switch 语句  Linux系统运维自动化项目教程_Ansible批量管理实战  微信推文制作网站有哪些,怎么做微信推文,急?  如何获取上海专业网站定制建站电话?  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  音响网站制作视频教程,隆霸音响官方网站?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Laravel模型事件有哪些_Laravel Model Event生命周期详解  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  iOS正则表达式验证手机号、邮箱、身份证号等  如何快速搭建高效香港服务器网站?  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法