使用 LINQ 选择具有不同名称的后代节点

Posted

技术标签:

【中文标题】使用 LINQ 选择具有不同名称的后代节点【英文标题】:Select descendant nodes that have different names using LINQ 【发布时间】:2013-03-02 00:16:12 【问题描述】:

我有一个这样的 XML:

<root>
  <data>
   <_0>
    <value1></value1>
    <value2></value2>
   </_0>
   <_1>
    <value1></value1>
    <value2></value2>
   </_1>
 </data>
</root>

我想获取数据节点的所有后代并且当前正在使用:

var descendants = from descendant in xdoc.Descendants("data")
                        select descendant;

但返回的只是数据元素之间包含的所有文本。如何获取以不同名称(如 _0、_1、_2 等)开头的所有后代的列表。它们将始终是数据节点的直接后代,因此必须有一种方法来获取这些后代。任何帮助将不胜感激,因为我对 LINQ 的工作不多。谢谢

【问题讨论】:

【参考方案1】:

你可以 Elements() 来获取孩子。像这样,大概:

var descendants = from descendant in xdoc.Descendants("data")
                        select descendant.Elements();

虽然使用 lambda 语法而不是查询理解语法可能更简洁:

var descendants = xdoc.Descendants("data").Elements();

【讨论】:

以上是关于使用 LINQ 选择具有不同名称的后代节点的主要内容,如果未能解决你的问题,请参考以下文章

获取满足两个不同后代选择器标准的“最深”元素

如何使用 LINQ 选择特定元素名称?

具有匿名类型和用户定义类型的 LINQ 选择查询

使用 LINQ 选择不同的条目

构建 LINQ 表达式以查找与树节点的所有后代相关的项目

Linq to XML 从 config.xml 选择节点(Lambda 表达式或经典查询)