在带有子列表<T>的List <T>中递归读取XML树结构

msf*_*boy 9 c# tree recursion linq-to-xml

我有这样的XML:

我有一个属性名称的成员类.

我怎样才能阅读每单位及其子单位分成多个通用的List<Unit>,可以再有孩子List<Unit>在递归的方式使用最新的.NET技术?

<Root>
  <Units Name="Test1">
    <Unit Name="Test11" />
    <Unit Name="Test12">
      <Unit Name="Test21" />
      <Unit Name="Test22" />
      <Unit Name="Test23">
        <Unit Name="Test31" />
        <Unit Name="Test32" />  
        <Unit Name="Test33" />
      </Unit>
      <Unit Name="Test24" />
    </Unit>
  </Units>
  <Units Name="Test2" />
    <!-- ... -->
  <Units Name="Test3" />
    <!-- ... -->
  <Units Name="Test4" />
</Root>
Run Code Online (Sandbox Code Playgroud)

Bro*_*ass 15

这样做,使用普通递归:

public class Unit
{
    public string Name { get; set; }
    public List<Unit> Children { get; set; }
}

class Program
{
    public static void Main()
    {
        XDocument doc = XDocument.Load("test.xml");
        List<Unit> units = LoadUnits(doc.Descendants("Units").Elements("Unit"));
    }

    public static List<Unit> LoadUnits(IEnumerable<XElement> units)
    {
        return units.Select( x=> new Unit() 
                                 { Name = x.Attribute("Name").Value, 
                                   Children = LoadUnits(x.Elements("Unit")) 
                                 }).ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)