在List&LT递归读取XML树结构; T>带着孩子名单< T> [英] Read a XML tree structure recursively in a List<T> with children lists<T>

查看:140
本文介绍了在List&LT递归读取XML树结构; T>带着孩子名单< T>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个这样的XML:



和我有一个属性Name会员类



我怎样才能阅读每单位及其子单位分成多个通用列表<单元> 可又有小孩列表<单元> 在递归的方式采用最新的.NET技术

 <根和GT; 
<单位名称=Test1的>
<单位名称=TEST11/>
<单位名称=TEST12>
<单位名称=Test21/>
<单位名称=Test22/>
<单位名称=Test23>
<单位名称=Test31/>
<单位名称=Test32/>
<单位名称=Test33/>
< /单元>
<单位名称=Test24/>
< /单元>
< /单位>
<单位名称=Test2的/>
<! - ... - >
<单位名称=Test3的/>
<! - ... - >
<单位名称=TEST4/>
< /根>


解决方案

这将做到这一点,使用普通的递归:

 公共类股
{
公共字符串名称{;组; }
公开名单<单元>儿童{搞定;组; }
}

类节目
{
公共静态无效的主要()
{
的XDocument DOC = XDocument.Load(测试。 XML);
名单,LT;单元>单位= LoadUnits(doc.Descendants(单位)元素(单位));
}

公共静态列表<单元> LoadUnits(IEnumerable的<的XElement>单位)
{
返回units.Select(X =>新的单位()
{名称= x.Attribute(姓名)值,
儿童= LoadUnits(x.Elements(单元))
})了ToList();
}
}


I have an XML like this:

And I have a Member class with property Name.

How can I read every Unit and its children Units into multiple generic List<Unit> which can have again children List<Unit> in a recursively way using latest .NET technology ?

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

解决方案

This would do it, using plain recursion:

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();
    }
}

这篇关于在List&LT递归读取XML树结构; T&GT;带着孩子名单&LT; T&GT;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆