在LINQ XML中获得最上层后代

本文关键字:后代 LINQ XML | 更新日期: 2023-09-27 18:15:50

我理解在LINQ XElement.Descendants<type>()中返回节点内的所有后代元素,即使它在相同类型的后代节点内。

XML如

<node1>
  <node5 id="upper">
    <node4>
      <node5 id="lower">
      </node5>
    </node4>
  </node5>
  <node3>
     <node5 id="other">
     </node5>
  </node3>
</node1>

在上面的例子中,XElement.Descendantsnode1上的node5返回所有后代"upper","lower"answers"other"。问题是,我只想要最上层的后代(node5的id为"upper"answers"other"-跳过"lower"),并跳过位于上层后代内部的那个。我无法理解如何在简单的一行代码中做到这一点。

在LINQ XML中获得最上层后代

您可以尝试跳过具有其他<node5>祖先的<node5>,以便只选择外部<node5>:

var doc = XElement.Parse("....");
var result = doc.Descendants("node5").Where(o => !o.Ancestors("node5").Any());
foreach (var r in result)
{
    Console.WriteLine(r.ToString());
}