0

これは私が使用しているテスト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ツリービューにバインドしたいのですが、名前カテゴリを持つ要素のみが必要であり、それらの名前をツリービューに表示したいと思います。

IDと名前を取得するのは簡単です:

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

しかし、ツリービューで構造を維持するにはどうすればよいですか?

これは次のようになります。

Test1

-> Test2

Test3

4

2 に答える 2

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

「カテゴリという名前の要素だけが欲しい」-ここで何を意味するのかわかりませんか?ただし、「name」属性を持つ要素のみを選択する場合は、次のように機能するはずです。

   ...
   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);
于 2010-06-24T21:04:21.933 に答える
0

実際、私はあなたが求めていることを正確に実行するこのリンクを見つけました:)そしてそれはLINQなしなので、私はそれが別の答えに値すると思いました。

http://www.15seconds.com/issue/041117.htm

于 2010-06-24T21:21:09.310 に答える