У меня есть следующий вид XML-данных из службы restful:
<nodeData>
<nodeObject>
<nodeName>Node 1</nodeName>
<nodeChildren>
<nodeObject>
<nodeName>Node 1-1</nodeName>
<nodeChildren>
<nodeObject>
<nodeName>Leaf 1-1-1</nodeName>
</nodeObject>
<nodeObject>
<nodeName>Leaf 1-1-2</nodeName>
</nodeObject>
<nodeObject>
<nodeName>Leaf 1-1-3</nodeName>
</nodeObject>
<nodeObject>
<nodeName>schedule 4.pdf</nodeName>
</nodeObject>
</nodeChildren>
</nodeObject>
<nodeObject>
<nodeName>Node 1-2</nodeName>
<nodeChildren>
<nodeObject>
<nodeName>Leaf 1-2-1</nodeName>
</nodeObject>
</nodeChildren>
</nodeObject>
</nodeChildren>
</nodeObject>
<nodeObject>
<nodeName>Node 2</nodeName>
<nodeChildren>
<nodeObject>
<nodeName>Node 2-1</nodeName>
<nodeChildren>
<nodeObject>
<nodeName>Leaf 2-1-1</nodeName>
</nodeObject>
</nodeChildren>
</nodeObject>
</nodeChildren>
</nodeObject>
......
</nodeData>
Итак, я хочу получить данные дерева, чтобы заполнить вид дерева при слабом освещении. Что я сделал, как показано ниже:
Создать внутренний класс:
public class nodeObject
{
public string nodeName { get; set; }
public IEnumerable<nodeObject> nodeChildren { get; set; }
}
Написать Linq как:
void proxy_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
XDocument xml = XDocument.Parse(e.Result);
var dataSource = (from results in xml.Descendants("nodeObject")
select new nodeObject
{
nodeName = results.Element("nodeName").Value.ToString(),
nodeChildren = this.GetChilden(results)
});
this.dataTree.ItemsSource = dataSource.ToList();
}
}
private IEnumerable<nodeObject> GetChilden(XElement parent)
{
return (from results in parent.Descendants("nodeObject")
select new nodeObject
{
nodeName = results.Element("nodeName").Value.ToString(),
}).ToList<nodeObject>();
}
затем запустите приложение silverlight. данные отображаются в древовидной структуре как (только 2 уровня с большим количеством дубликатов):
Node 1
Node 1-1
Leaf 1-1-1
Leaf 1-1-2
Leaf 1-1-3
Node 1-2
Leaf 2-1-1
Node 1-1
Leaf 1-1-1
Leaf 1-1-2
Leaf 1-1-3
Node 1-2
Leaf 2-1-1
Node 1-2
Leaf 2-1-1
Node 2
Node 2-1
Leaf 2-1-1
Node 2-1
Leaf 2-1-1
Но ожидаемое отображение должно быть таким (без листа):
Node 1
Node 1-1
Node 1-2
Node 2
Node 2-1
Или как (включая лист):
Node 1
Node 1-1
Leaf 1-1-1
Leaf 1-1-2
Leaf 1-1-3
Node 1-2
Leaf 2-1-1
Node 2
Node 2-1
Leaf 2-1-1
Как решить эту проблему?