c#linq to-xml,获得带有节点的列表?
-
29-09-2019 - |
题
这是我正在使用的测试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,我只需要具有名称类别的元素,我希望这些元素出现在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
解决方案
如果我正确理解您,也许这样的事情? (我没有测试)
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);
其他提示
实际上,我找到了这个链接,它完全可以完成您的要求:)没有Linq,所以我认为它值得另一个答案。
不隶属于 StackOverflow