C#如何遍历XDocument的所有子孙节点 Descendants()方法
#技术教程 发布时间: 2026-01-13
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")→ 支持命名空间,ns是XNamespace实例 - 结果仍是
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()判断类型
上一篇 : 拼豆立体怎么做_立体拼豆教程
下一篇 : Word怎么设置对称页边距 Word书籍折页打印设置【教程】
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!
孙元素