首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實作 TreeView 與 XML 互轉類別

     編輯:關於C語言

從第一次接觸 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>
        /// 遍歷 XML 並實現向 Tree 的轉換
        /// </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 subXMLnode in root.ChildNodes)
            {
                TreeNode treeRootNode = new TreeNode();
                treeRootNode.Text = subXMLnode.Name;
                thetreeView.Nodes.Add(treeRootNode);
                TransXML(subXMLnode.ChildNodes, treeRootNode);
            }

            return 0;
        }

        private int TransXML(XmlNodeList XMLnodes, TreeNode parentNode)
        {
            // 遍歷 XML 中的所有節點,仿照 TreeView 節點遍歷函式
            foreach (XmlNode xmlNode in XMLnodes)
            {
                TreeNode subTreeNode = new TreeNode();
                subTreeNode.Text = xmlNode.Name;
                parentNode.Nodes.Add(subTreeNode);

                if (xmlNode.ChildNodes.Count > 0)
                {
                    TransXML(xmlNode.ChildNodes, subTreeNode);
                }
            }

            return 0;
        }
        #endregion
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved