使用递归函数获取所有XElement父元素

本文关键字:XElement 元素 递归函数 获取 | 更新日期: 2023-09-27 18:13:02

我试图获得给定XElement的所有父元素。我试着写这个函数,但它不起作用。页面不断加载。

public List<XElement> GetParents(XElement element)
{
    List<XElement> parentList = new List<XElement>();
    XElement cParent = element.Parent;
    while (cParent != null)
    {
        parentList.Add(cParent);
        GetParents(cParent);
    }
    return parentList;
}

Call:

Parents = GetParents(nodeOfPage);

有人知道如何解决我的问题吗?谢谢你

使用递归函数获取所有XElement父元素

直接调用.Ancestors()扩展方法

@SLaks的建议是伟大的,如果我是你,我一定会使用它,但它并没有澄清为什么你的代码不能工作

你的代码不工作,因为你有一个无限的while循环,你从来没有改变你的while循环中的cParent,所以它永远不会退出它。

你可以试试这个:

 public List<XElement> GetParents(XElement element)
 {
    List<XElement> parentList = new List<XElement>();
    XElement cParent = element.Parent;
    while (cParent != null)
    {
        parentList.Add(cParent);
        cParent = cParent.Parent;
    }
    return parentList;
 }

或使用递归:

public List<XElement> GetParents(XElement element)
 {
    XElement cParent = element.Parent;
    if (cParent == null)
    {
        return new List<XElement>();
    }
    var parents = GetParents(cParent);
    parents.Add(cParent);
    return parents;
 }