【问题标题】:C#/XML Populate TreeView with XML fileC#/XML 使用 XML 文件填充 TreeView
【发布时间】:2013-08-25 12:32:52
【问题描述】:

我正在尝试从 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);
            }
        }            
    }

【问题讨论】:

    标签: c# xml treeview


    【解决方案1】:

    您必须仅在当前 parent 元素中搜索 elements。试试看:

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

    或者甚至更好:

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

    【讨论】:

    • 这是一个非常简单的解决方案。谢谢。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-05
      • 2020-05-15
      • 2013-07-28
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多