C#实现TreeView向XML的绝对转换类 .
来源:互联网 发布:培训机构垃圾 知乎 编辑:程序博客网 时间:2024/06/09 14:01
从第一次接触XML开始就想写一个能实现tree和XML灵活转换的类了。
写这个类大概用去了将近半天的时间,花的时间有些长了。呵呵。。好在收获颇多,熟练了XML的读写类,对C#中的foreach循环也有了更深的认识。
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Windows.Forms;
- using System.Xml;
- namespace TreeExXML
- {
- class TreeExXMLCls
- {
- private TreeView thetreeview;
- private string xmlfilepath;
- XmlTextWriter textWriter;
- XmlNode Xmlroot;
- XmlDocument textdoc;
- public TreeExXMLCls()
- {
- //----构造函数
- textdoc = new XmlDocument();
- }
- ~TreeExXMLCls()
- {
- //----析构函数
- }
- #region 遍历treeview并实现向XML的转化
- /// <summary>
- /// 遍历treeview并实现向XML的转化
- /// </summary>
- /// <param name="TheTreeView">树控件对象</param>
- /// <param name="XMLFilePath">XML输出路径</param>
- /// <returns>0表示函数顺利执行</returns>
- public int TreeToXML(TreeView TheTreeView, string XMLFilePath)
- {
- //-------初始化转换环境变量
- thetreeview = TheTreeView;
- xmlfilepath = XMLFilePath;
- textWriter = new XmlTextWriter(xmlfilepath, null);
- //-------创建XML写操作对象
- textWriter.Formatting = Formatting.Indented;
- //-------开始写过程,调用WriteStartDocument方法
- textWriter.WriteStartDocument();
- //-------写入说明
- textWriter.WriteComment("this XML is created from a tree");
- textWriter.WriteComment("By 思月行云");
- //-------添加第一个根节点
- textWriter.WriteStartElement("TreeExXMLCls");
- textWriter.WriteEndElement();
- //------ 写文档结束,调用WriteEndDocument方法
- textWriter.WriteEndDocument();
- //-----关闭输入流
- textWriter.Close();
- //-------创建XMLDocument对象
- textdoc.Load(xmlfilepath);
- //------选中根节点
- XmlElement Xmlnode=textdoc.CreateElement(thetreeview.Nodes[0].Text);
- Xmlroot = textdoc.SelectSingleNode("TreeExXMLCls");
- //------遍历原treeview控件,并生成相应的XML
- TransTreeSav(thetreeview.Nodes, (XmlElement)Xmlroot);
- return 0;
- }
- private int TransTreeSav(TreeNodeCollection nodes, XmlElement ParXmlnode)
- {
- //-------遍历树的各个故障节点,同时添加节点至XML
- XmlElement xmlnode;
- Xmlroot = textdoc.SelectSingleNode("TreeExXMLCls");
- foreach (TreeNode node in nodes)
- {
- xmlnode = textdoc.CreateElement(node.Text);
- ParXmlnode.AppendChild(xmlnode);
- if (node.Nodes.Count > 0)
- {
- TransTreeSav(node.Nodes, xmlnode);
- }
- }
- textdoc.Save(xmlfilepath);
- return 0;
- }
- #endregion
- #region 遍历XML并实现向tree的转化
- /// <summary>
- /// 遍历treeview并实现向XML的转化
- /// </summary>
- /// <param name="XMLFilePath">XML输出路径</param>
- /// <param name="TheTreeView">树控件对象</param>
- /// <returns>0表示函数顺利执行</returns>
- public int XMLToTree(string XMLFilePath,TreeView TheTreeView)
- {
- //-------重新初始化转换环境变量
- thetreeview = TheTreeView;
- xmlfilepath = XMLFilePath;
- //-------重新对XMLDocument对象赋值
- textdoc.Load(xmlfilepath);
- XmlNode root = textdoc.SelectSingleNode("TreeExXMLCls");
- foreach (XmlNode subXmlnod in root.ChildNodes)
- {
- TreeNode trerotnod = new TreeNode();
- trerotnod.Text = subXmlnod.Name;
- thetreeview.Nodes.Add(trerotnod);
- TransXML(subXmlnod.ChildNodes, trerotnod);
- }
- return 0;
- }
- private int TransXML(XmlNodeList Xmlnodes,TreeNode partrenod)
- {
- //------遍历XML中的所有节点,仿照treeview节点遍历函数
- foreach (XmlNode xmlnod in Xmlnodes)
- {
- TreeNode subtrnod = new TreeNode();
- subtrnod.Text = xmlnod.Name;
- partrenod.Nodes.Add(subtrnod);
- if (xmlnod.ChildNodes.Count > 0)
- {
- TransXML(xmlnod.ChildNodes, subtrnod);
- }
- }
- return 0;
- }
- #endregion
- }
- }
直接调用相关方法,即可实现Treeview与xml间的相互转换,方便快捷~
除此之外,我们还可以在现有基础上对这个类进行扩展。比方说,我们可以使用Xml中的属性(Attribute)存储所有Treenode的Tag内容。
Xml中属性的使用相对简单:
使用XmlElement.SetAttribute(string name,string value)既可以新增属性,也可以针对旧有属性更改其值。
使用string XmlElement.GetAttribute(string name)可以方便的获得已有属性的值。
以下提供源代码文件下载。
0 0
- C#实现TreeView向XML的绝对转换类
- C#实现TreeView向XML的绝对转换类 .
- C#实现TreeView向XML的绝对转换类的小修改
- c#解析xml绑定treeview控件实现
- Java类向XML转换、XML向Java类转换
- 使用C#实现将XML数据填充到TreeView中
- C# TreeView的帮助类
- C#递归实现Treeview
- C# 读取 XML 到TreeView
- C# xml内容绑定treeview
- C#中xml写入treeview,treeview写入xml
- C#中xml写入treeview,treeview写入xml
- C# 实现 DataTable 转换成 XML字符串
- 实现Treeview读取XML文档
- C# 移动TreeView的节点的类.
- C# 子类向父类转换 测试
- ASP.NET实现TreeView的XML数据源绑定
- ASP.NET实现TreeView的XML数据源绑定
- Java程序操作Excel
- IOS中的Block在C++中的运用
- Call-time pass-by-reference has been removed
- Byte的取值范围0到255
- HDU 2602 Bone Collector (01背包)
- C#实现TreeView向XML的绝对转换类 .
- uva11600 - Masud Rana 状态压缩 期望
- hdu 1009 FatMouse' Trade (贪心)
- poj 3259 Wormholes 最短路
- 在windows,mac,linux下 git ssh key的生成
- Safe C++ 读书笔记:对基本数据类型进行封装,以编写更安全的C++代码
- openssl与cryptoAPI交互AES加密解密
- 【转】NSJSONSerialization解析JSON数据
- IIS网站配置