2010-06-24 71 views
0

这是测试的XML,我现在用:C#linq-to-xml,获取带有节点的列表?

<categories> 
<category id="1" name="Test1"> 
    <category id="2" name="Test2"> 
     <misc id="1"></misc> 
    </category> 
</category>  
<category id="3" name="Test3"> 
    <misc id="2"></misc> 
</category>  

现在我想绑定的是一个ASPX TreeView的,我想只有那些名称类的元素,我想的名字那些出现在树形视图中。

它容易得到的ID和名称:

var d = from t in data.Descendants("category") 
    select new { ID = t.Attribute("id").Value, Name = t.Attribute("name").Value }; 

但如何保持结构树视图中的?

这应该是这样的:

Test1的

- > Test2的

Test3的

回答

1

也许是这样的,如果我理解正确吗? (我没有测试过)

class Category 
{ 
    public string ID { get; set; } 
    public string Name { get; set; } 
    public IEnumerable<Category> SubCategories { get; set; } 
} 

IEnumerable<Category> CategoryTreeStructure(XElement e) 
{ 
    var d = from t in e.Elements("category") 
      select new Category() 
      { 
       ID = t.Attribute("id").Value, 
       Name = t.Attribute("name").Value, 
       SubCategories = CategoryTreeStructure(t) 
      }; 

    return d; 
} 

调用它:

var structure = CategoryTreeStructure(doc.Root); 

“我想只有那些名字类别元素” - 我不明白你的意思吗?但是,如果你只需要选择那些有“名”属性的元素,然后这应该工作:

... 
    var d = from t in e.Elements("category") 
      where t.Attribute("name") != null 
      select new Category() 
      ... 

据我所知,上(下称“名”属性的一部分)是不是你想要的,但我把它那里。我已经测试反对代码:

XDocument doc = XDocument.Parse(@"<categories> 
<category id=""1"" name=""Test1""> 
    <category id=""2"" name=""Test2""> 
     <misc id=""1""></misc> 
    </category> 
</category>  
<category id=""3"" name=""Test3""> 
    <misc id=""2""></misc> 
</category> 
</categories>"); 
      var structure = CategoryTreeStructure(doc.Root); 
+0

对不起,我的坏。我只想要被称为category的元素,例如: Patrick 2010-06-24 21:12:04

+0

Ahh okay,那么上面的代码应该没问题:)我现在已经测试过它,它工作正常。我已经发布了对代码的一些小修改。 – 2010-06-24 21:13:03