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