2013-08-22 123 views
1

即时尝试从xml文件填充树视图。C#/ XML使用XML文件填充TreeView

图像输出:http://i.stack.imgur.com/3HSCu.png

所以你可以看到父母被加载好了,但孩子的(元素)没有。所有的子节点都加载到所有父节点中。但是XML不是这样的。

这是XML代码:

<?xml version="1.0" encoding="utf-8" ?> 
<toolbox> 
<parent id="p1" caption="All Elements" class="parent"> 
    <element id="1" name="Button" /> 
    <element id="2" name="Label" /> 
    <element id="3" name="Inputfield" /> 
    <element id="4" name="Textarea" /> 
    <element id="5" name="Image" /> 
    <element id="6" name="Background" /> 
    <element id="7" name="TreeView" /> 
</parent> 
<parent id="p2" caption="Some Elements 1" class="parent"> 
    <element id="1" name="Button" /> 
    <element id="2" name="Label" /> 
    <element id="3" name="Inputfield" /> 
</parent> 
<parent id="p3" caption="Some Elements 2" class="parent"> 
    <element id="4" name="Textarea" /> 
    <element id="5" name="Image" /> 
    <element id="6" name="Background" /> 
    <element id="7" name="TreeView" /> 
</parent> 
</toolbox> 

这是C#代码:

public void loadElements(string XML_Elements, TreeView Elements_Tree){ 
     XmlDocument XMLDocument = new XmlDocument(); 
     XMLDocument.Load(XML_Elements); 

     Elements_Tree.Nodes.Clear(); 
     Elements_Tree.BeginUpdate(); 

     XmlNodeList XMLParent = XMLDocument.SelectNodes("toolbox/parent"); 
     foreach(XmlNode xmlparent in XMLParent){ 
      //add parents 
      string Parent_Caption = xmlparent.Attributes["caption"].Value; 
      TreeNode parents = Elements_Tree.Nodes.Add(Parent_Caption); 

      //add childs 
      XmlNodeList XMLChilds = XMLDocument.SelectNodes("toolbox/parent/element"); 
      foreach (XmlNode xmlchild in XMLChilds) 
      { 
       string Child_Name = xmlchild.Attributes["name"].Value; 
       parents.Nodes.Add(Child_Name); 
      } 
     }    
    } 

回答

1

您必须在当前的parent元素内搜索element。尝试:

XmlNodeList XMLChilds = XMLDocument.SelectNodes("toolbox/parent[@caption='" + Parent_Caption + "']/element"); 

,或者甚至更好:

XmlNodeList XMLChilds = xmlparent.SelectNodes("element"); 
+0

这是一个真正的简单的解决方案。谢谢。 – user2708135

0

XMLDocument.SelectNodes("toolbox/parent/element")选择匹配文档中的所有节点。您需要获取当前XmlNode的子项,而不是从XMLDocument开始。