zoukankan      html  css  js  c++  java
  • C#TreeView读取Xml,TreeView导出到Xml

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
    using System.Collections;
    using System.IO;
     
    namespace TreeLoadXml
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            XmlDocument doc = new XmlDocument();
            StringBuilder sb = new StringBuilder();
            //XML每行的内容
            private string xmlLine = "";
            //加载
            private void Form1_Load(object sender, EventArgs e)
            {
                doc.Load("TreeXml.xml"); //我是把xml放到debug里面了.你的路径就随便啦.不过这样方便一些.
                RecursionTreeControl(doc.DocumentElement, treeView1.Nodes);//将加载完成的XML文件显示在TreeView控件中
                treeView1.ExpandAll();//展开TreeView控件中的所有项
            }
            /// <summary>
            /// RecursionTreeControl:表示将XML文件的内容显示在TreeView控件中
            /// </summary>
            /// <param name="xmlNode">将要加载的XML文件中的节点元素</param>
            /// <param name="nodes">将要加载的XML文件中的节点集合</param>
            private void RecursionTreeControl(XmlNode xmlNode, TreeNodeCollection nodes)
            {
                foreach (XmlNode node in xmlNode.ChildNodes)//循环遍历当前元素的子元素集合
                {
                    TreeNode new_child = new TreeNode();//定义一个TreeNode节点对象
                    new_child.Name = node.Attributes["Name"].Value;
                    new_child.Text = node.Attributes["Text"].Value;
                    nodes.Add(new_child);//向当前TreeNodeCollection集合中添加当前节点
                    RecursionTreeControl(node, new_child.Nodes);//调用本方法进行递归
                }
            }
            //双击时修改
            private void treeView1_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    Point ClickPoint = new Point(e.X, e.Y);
                    TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint);
                    if (CurrentNode != null)//判断你点的是不是一个节点
                    {
                        treeView1.SelectedNode = CurrentNode;//选中这个节点
                        treeView1.LabelEdit = true;
                        treeView1.SelectedNode.BeginEdit();
                    }
                }
            }
     
            //递归遍历节点内容,最关键的函数
            private void parseNode(TreeNode tn, StringBuilder sb)
            {
                IEnumerator ie = tn.Nodes.GetEnumerator();
     
                while (ie.MoveNext())
                {
                    TreeNode ctn = (TreeNode)ie.Current;
                    xmlLine = GetRSSText(ctn);
                    sb.Append(xmlLine);
                    //如果还有子节点则继续遍历
                    if (ctn.Nodes.Count > 0)
                    {
                        parseNode(ctn, sb);
                    }
                    sb.Append("</Node>");
                }
     
     
            }
            //成生RSS节点的XML文本行
            private string GetRSSText(TreeNode node)
            {
                //根据Node属性生成XML文本
                string rssText = "<Node Name="" + node.Name + "" Text="" + node.Text + "" >";
     
                return rssText;
            }
     
            //添加节点
            private void addTreeNode_Click(object sender, EventArgs e)
            {
                try
                {
                    treeView1.SelectedNode.Nodes.Add("新建子节点");
                    toolStripStatusLabel1.Text = "新建子节点";
                }
                catch (Exception ex)
                {
                    toolStripStatusLabel1.Text = ex.Message;
                }
            }
            //删除节点
            private void deleteTreeNode_Click(object sender, EventArgs e)
            {
                try
                {
                    treeView1.SelectedNode.Remove();
                }
                catch (Exception ex)
                {
     
                    toolStripStatusLabel1.Text = ex.Message;
                }
            }
     
            private void addRootTreeNode_Click(object sender, EventArgs e)
            {
                try
                {
                    treeView1.Nodes.Add("新建根节点");
                    toolStripStatusLabel1.Text = "新建根节点成功";
                }
                catch (Exception ex)
                {
                    toolStripStatusLabel1.Text = ex.Message;
                }
            }
            //保存
            private void SaveXml_Click(object sender, EventArgs e)
            {
                try
                {
     
                    //写文件头部内容
                    //下面是生成RSS的OPML文件
                    sb.Append("<?xml version="1.0" encoding="UTF-8"?>");
                    sb.Append("<Tree>");
     
                    //遍历根节点
                    foreach (TreeNode node in treeView1.Nodes)
                    {
                        xmlLine = GetRSSText(node);
                        sb.Append(xmlLine);
     
                        //递归遍历节点
                        parseNode(node, sb);
     
                        sb.Append("</Node>");
                    }
                    sb.Append("</Tree>");
     
                    StreamWriter sr = new StreamWriter("TreeXml.xml", false, System.Text.Encoding.UTF8);
                    sr.Write(sb.ToString());
                    sr.Close();
                    toolStripStatusLabel1.Text = "保存成功";
                }
                catch (Exception ex)
                {
                    toolStripStatusLabel1.Text = ex.Message;
                }
            }
        }
    }

    记一下 转载:https://www.cnblogs.com/vaevvaev/p/7211265.html

  • 相关阅读:
    Pet Shop 4.0 详细解析(转) 沧海一粟
    如何制作Bat批处理文件 沧海一粟
    iOS开发Icon图标设置 (转) 沧海一粟
    Android金背大刀之ToggleButton之稍息立正
    Android碧水剑之DatePickerDialog、TimePickerDialog之岁月如梭
    平衡边界作业算法并发仿真测试基于三层架构的Web系统的基准性能
    Android鸳鸯刀之DatePicker、TimePicker之明年今日
    Android应用性能优化整体策略
    Android应用开发之性能测试之TraceView
    平衡边界作业算法并发仿真测试网络存储系统的响应时间
  • 原文地址:https://www.cnblogs.com/xuezhu/p/14247442.html
Copyright © 2011-2022 走看看