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

C# TreeView 與 XML 雙向轉換完整實作:遞迴遍歷與 XmlDocument 操作

     編輯:關於C#

功能概覽

  • TreeToXML:遍歷 TreeView.Nodes,遞迴生成 XML 節點,輸出至檔案。
  • XMLToTree:載入 XML,遞迴重建 TreeNode 階層。

核心代碼


public class TreeExXMLCls
{
    private TreeView _treeView;
    private string _xmlPath;
    private XmlDocument _doc = new XmlDocument();
    private XmlTextWriter _writer;

    // TreeView → XML
    public int TreeToXML(TreeView tv, string path)
    {
        _treeView = tv; _xmlPath = path;
        _writer = new XmlTextWriter(path, null) { Formatting = Formatting.Indented };
        _writer.WriteStartDocument();
        _writer.WriteComment("Generated from TreeView");
        _writer.WriteStartElement("TreeExXMLCls");
        _writer.WriteEndElement();
        _writer.WriteEndDocument();
        _writer.Close();

        _doc.Load(path);
        XmlElement root = _doc.CreateElement(tv.Nodes[0].Text);
        _doc.DocumentElement.AppendChild(root);
        TransTreeSave(tv.Nodes, root);
        _doc.Save(path);
        return 0;
    }

    private void TransTreeSave(TreeNodeCollection nodes, XmlElement parentXml)
    {
        foreach (TreeNode node in nodes)
        {
            XmlElement xmlNode = _doc.CreateElement(node.Text);
            parentXml.AppendChild(xmlNode);
            if (node.Nodes.Count > 0)
                TransTreeSave(node.Nodes, xmlNode);
        }
        _doc.Save(_xmlPath);
    }

    // XML → TreeView
    public int XMLToTree(string path, TreeView tv)
    {
        _treeView = tv; _xmlPath = path;
        _doc.Load(path);
        XmlNode root = _doc.SelectSingleNode("TreeExXMLCls");

        foreach (XmlNode xmlNode in root.ChildNodes)
        {
            TreeNode tn = new TreeNode(xmlNode.Name);
            tv.Nodes.Add(tn);
            TransXML(xmlNode.ChildNodes, tn);
        }
        return 0;
    }

    private void TransXML(XmlNodeList xmlNodes, TreeNode parentNode)
    {
        foreach (XmlNode xmlNode in xmlNodes)
        {
            TreeNode tn = new TreeNode(xmlNode.Name);
            parentNode.Nodes.Add(tn);
            if (xmlNode.ChildNodes.Count > 0)
                TransXML(xmlNode.ChildNodes, tn);
        }
    }
}

關鍵技術點

  1. XmlTextWriter:流式寫入、自動縮排、效能佳。
  2. XmlDocument:DOM 模型,支援 CreateElement、AppendChild、SelectSingleNode、Save。
  3. 遞迴對稱性:TreeNode ↔ XmlNode 結構天然對應,遞迴邏輯幾乎鏡像。
  4. 根節點約定:XML 最外層固定為 <TreeExXMLCls>,內含單一根節點對應 TreeView 首節點。

擴充建議

  • 支援節點屬性 (Tag, ImageIndex, Checked) 序列化為 XML Attributes。
  • 使用 XDocument (LINQ to XML) 簡化代碼、提升可讀性。
  • 處理特殊字元 (XML 非法字元) 的編碼/解碼。
  • 大量節點時考慮虛擬化載入 (按需展開)。

結語

TreeView 與 XML 的雙向轉換是階層資料持久化的基礎範式。掌握 XmlDocument DOM 操作與遞迴遍歷模板,可快速構建設定檔匯入/匯出、目錄樹同步、思維導圖儲存等功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved