2013-08-22 2 views
1

im пытается заполнить древовидное представление из XML-файла.C#/XML Populate TreeView с XML-файлом

Изображение выхода: 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

Вы должны найти element s только в пределах текущего parent элемент. Попробуйте это:

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.