TreeView.Nodes,遞迴生成 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);
}
}
}
CreateElement、AppendChild、SelectSingleNode、Save。<TreeExXMLCls>,內含單一根節點對應 TreeView 首節點。Tag, ImageIndex, Checked) 序列化為 XML Attributes。XDocument (LINQ to XML) 簡化代碼、提升可讀性。TreeView 與 XML 的雙向轉換是階層資料持久化的基礎範式。掌握 XmlDocument DOM 操作與遞迴遍歷模板,可快速構建設定檔匯入/匯出、目錄樹同步、思維導圖儲存等功能。