2011-03-25 9 views
5

Tengo un proyecto .NET 3.5 winforms estándar. En él, tiene una vista de árbol. He serializado una instancia de List en XML, usando XmlSerializer y clases relacionadas, para tener un archivo XML jerárquico.Enlace jerárquico xml a vista de árbol

Ahora, necesito vincular este archivo XML a la vista de árbol para visualizar todos sus nodos/elementos (padres, hijos, etc.).

¿Es conveniente hacerlo (LINQ o no), sin tener que analizar XML, etc.?

Gracias

+0

no XmlDataSource hacer esto? –

Respuesta

13

Una solución que no necesita a analizar XML a fin de obligar su contenido a un TreeViewno existe (y si sale, internamente, por supuesto, se analiza XML).

De todos modos se podría implementar esto por sí mismo mediante el uso de LINQ to XML:

private void Form1_Load(object sender, EventArgs e) 
{ 
    var doc = XDocument.Load("data.xml"); 
    var root = doc.Root; 
    var x = GetNodes(new TreeNode(root.Name.LocalName), root).ToArray(); 

    treeView1.Nodes.AddRange(x); 
} 

private IEnumerable<TreeNode> GetNodes(TreeNode node, XElement element) 
{ 
    return element.HasElements ? 
     node.AddRange(from item in element.Elements() 
         let tree = new TreeNode(item.Name.LocalName) 
         from newNode in GetNodes(tree, item) 
         select newNode) 
         : 
     new[] { node }; 
} 

Y en TreeNodeEx:

public static class TreeNodeEx 
{ 
    public static IEnumerable<TreeNode> AddRange(this TreeNode collection, IEnumerable<TreeNode> nodes) 
    { 
     var items = nodes.ToArray(); 
     collection.Nodes.AddRange(items); 
     return new[] { collection }; 
    } 
}