如何获得给定子节点的所有父母?

时间:2014-07-20 06:41:57

标签: c# linq

<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="">

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

1 个答案:

答案 0 :(得分:2)

你的意思是这样吗?

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

修改

正如杰夫在评论中指出的那样,你的例子实际上确实在你父母的一个父母身上有一个结束标记。行,因此不应该实际包括在内。如果你实际上是指那些落在给定记录之前的元素,&#34;与父母相比,您可以使用XNode.NodesBeforeSelf()