在c#中使用主节点和子节点

时间:2016-08-30 07:17:07

标签: c# tree treeview

我想根据从解析的xml文档中获取的信息显示树视图结构。它必须只显示“ItemName”,并且取决于节点的“Level”,它假设为1级是父级,2级是子级,3级是childs子级(叶子)。

我想在添加子节点时遇到错误,或者当我遍历xml节点时,它只保存最后一个节点和子节点。

这是我到目前为止所做的事情

请注意,这必须显示在窗体结构视图

private void TreeNodeStrcutureManually(XmlDocument structure)
    {


        treeView1.Nodes.Clear();

        XmlElement root = structure.DocumentElement;
        XmlNodeList itemName = root.GetElementsByTagName("ItemName");
        XmlNodeList level = root.GetElementsByTagName("Level");


        string parent = "";
        string childNode1 = "";
        string childNode2 = "";


        {
            for (int i = 0; i < itemName.Count; i++)
            {



                TreeNode tNode;


                if (level.Item(i).InnerText == "1")
                {

                    parent = itemName.Item(i).InnerText;
                    tNode = treeView1.Nodes.Add(parent);

                }

                if (level.Item(i).InnerText == "2")
                {
                    childNode1 = itemName.Item(i).InnerText;
                    tNode.Nodes.Add(childNode1);
                }

                if (level.Item(1).InnerText == "3")
                {

                    childNode2 = itemName.Item(i).InnerText;
                     tNode.Nodes.Add(childNode2);
                }
              }
           }

以下是如何返回xml的示例:

                  <HR>
                     <ItemName> Addidas</ItemName>
                       <level> 1 </level>
                  </HR>


                  <HR>
                    <ItemName> Shoe </ItemName>
                    <level> 2 </level>
                   </HR>

                  <HR>
                   <ItemName> Tshirt </ItemName>
                    <level> 2 </level>
                     </HR>

                      <HR>
                     <ItemName> shoelace </ItemName>
                     <level> 2 </level> 
                     </HR>


                       <HR>
                        <ItemName> Running </ItemName>
                       <level> 3 </level>
                      </HR> 

                        <HR>
                         <ItemName> Nike </ItemName>
                       <level> 1 </level>
                          </HR>

1 个答案:

答案 0 :(得分:0)

这是一个如何使用treeview节点来创建Hierarchic结构的示例。 您必须为每个分支拥有TreeNode对象。 正如您在示例中看到的那样,父级和子级之间必须存在“绑定”。 希望能帮助到你。

    private void TreeNodeStrcutureManually()
    {
TreeNode level1=new TreeNode();
TreeNode level2=new TreeNode();
TreeNode level3=new TreeNode();
TreeNode level4=new TreeNode();
TreeNode level5=new TreeNode(); 


            for (int i = 0; i <= 4; i++)
            {
               switch (i)

                {
                case 0:
                        level1 = treeView1.Nodes.Add("LEVEL1");
                        break;
                case 1:
                        level2 = level1.Nodes.Add("LEVEL2");
                    break;
                case 2:
                    level3 = level2.Nodes.Add("LEVEL3");
                    break;
                case 3:
                    level4 = level3.Nodes.Add("LEVEL4");
                    break;
                case 4:
                    level5 = level4.Nodes.Add("LEVEL5");
                    break;
                default:

                    break;
                }
            }
    }

<强>更新

你解析xml的方式不正确,这就是你得到的原因:

  

对象引用未设置为对象的实例。

这是更有效和严格的方法:

    private void TreeNodeStrcutureManually(XmlDocument x)
    {

    TreeNode level1 = new TreeNode();
    TreeNode level2 = new TreeNode();
    TreeNode level3 = new TreeNode();

    XmlNodeList nl = x.SelectNodes("DOC");
    XmlNode root = nl[0];

    foreach (XmlNode xnode in root.ChildNodes)
    {
        string level = xnode.LastChild.InnerText;

        switch (level)
        {
            case " 1 ":
                level1 = treeView1.Nodes.Add(level);
                break;
            case " 2 ":
                level2 = level1.Nodes.Add(level);
                break;
            case " 3 ":
                level3 = level2.Nodes.Add(level);
                break;
            default:

                break;

        }
    }
}

,那就是带有<DOC> </DOC>父标记的xml:

另请注意,level1节点的值具有空格(“1”的内容为“1”)。

- <DOC>
- <HR>
  <ItemName>Addidas</ItemName> 
  <level>1</level> 
  </HR>
- <HR>
  <ItemName>Shoe</ItemName> 
  <level>2</level> 
  </HR>
- <HR>
  <ItemName>Tshirt</ItemName> 
  <level>2</level> 
  </HR>
- <HR>
  <ItemName>shoelace</ItemName> 
  <level>2</level> 
  </HR>
- <HR>
  <ItemName>Running</ItemName> 
  <level>3</level> 
  </HR>
- <HR>
  <ItemName>Nike</ItemName> 
  <level>1</level> 
  </HR>
  </DOC>