2013-08-22 212 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開始。