如何获取给定子节点的所有父节点

本文关键字:子节点 父节点 何获取 获取 | 更新日期: 2023-09-27 18:13:37

<siteNode controller="a" action="b" title="">
  <siteNode controller="aa" action="bb" title="" />
  <siteNode controller="cc" action="dd" title="">
    <siteNode controller="eee" action="fff" title="" />
    <siteNode controller="eee1" action="fff1" title="" />
  </siteNode>
</siteNode>

如何使用LINQ获得子节点的父节点?

例如,如果我给出controller="eee"元素,我将返回:

<siteNode controller="a" action="b" title="">
  <siteNode controller="aa" action="bb" title="" />
  <siteNode controller="cc" action="dd" title="">

我需要从上面的示例中获取所有父节点和祖父节点。

如何获取给定子节点的所有父节点

你是说这样吗?

IEnumerable<XElement> GetParents(XElement element)
{
    XElement cParent = element.Parent;
    while (cParent != null)
    {
        yield return cParent;
        cParent = cParent.Parent;
    }
}
编辑:

正如Jeff在评论中指出的那样,您的示例实际上在您的"父"行中有一个结束标记,因此实际上不应该包含在其中。如果您实际上指的是"落在给定记录之前的元素",与它的父元素相比,您可以使用XNode.NodesBeforeSelf()