C#实现TreeView向XML的绝对转换类

从第一次接触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的转化 /// /// 遍历treeview并实现向XML的转化 /// /// 树控件对象 /// XML输出路径 /// 0表示函数顺利执行 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的转化 /// /// 遍历treeview并实现向XML的转化 /// /// XML输出路径 /// 树控件对象 /// 0表示函数顺利执行 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)可以方便的获得已有属性的值。
以下提供源代码文件 下载

你可能感兴趣的:(C#专题之高级类,控件的使用,xml,c#,string,tree,class,文档)