本帖最后由 binjoo 于 2009-06-06 18:37:23 编辑

解决方案 »

  1.   

            /// <summary>
            /// 将TreeView保存到XML文件中
            /// </summary>
            /// <param name="saveXmlDlg">保存文件对话框</param>
            /// <param name="treeViewControl">节点集合</param>
            public void SaveTreeViewToXml(SaveFileDialog saveXmlDlg, TreeView treeViewControl)
            {
                saveXmlDlg.DefaultExt = "xml";
                saveXmlDlg.Filter = "XML Files (*.xml)|*.xml";
                saveXmlDlg.FilterIndex = 1;
                if (saveXmlDlg.ShowDialog() == DialogResult.OK)
                {
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml("<分类体系></分类体系>");
                    XmlNode root = doc.DocumentElement;
                    doc.InsertBefore(doc.CreateXmlDeclaration("1.0", "utf-8", "yes"), root);
                    TreeNodeToXml(treeViewControl.TopNode.Nodes, root);
                    doc.Save(saveXmlDlg.FileName);
                }
            }       /// <summary>
            /// 递归的方法读取TreeView控件所有节点并填入XML文件
           /// </summary>
           /// <param name="treeNodes">所有节点集合</param>
           /// <param name="xmlNode">xml文档中的单个节点</param>
            public void TreeNodeToXml(TreeNodeCollection treeNodes, XmlNode xmlNode)
            {
                XmlDocument doc = xmlNode.OwnerDocument;
                foreach (TreeNode treeNode in treeNodes)
                {
                    //创建一个xml元素(element)
                    XmlNode element = doc.CreateNode("element", treeNode.Name.ToString(), "");
                    //创建一个属性Name
                    XmlAttribute attr = doc.CreateAttribute("Name");
                    //为属性赋值
                    attr.Value = treeNode.Text;
                    //为该元素添加属性
                    element.Attributes.Append(attr);
                    //添加元素
                    xmlNode.AppendChild(element);
                    if (treeNode.Nodes.Count > 0)
                    {
                        TreeNodeToXml(treeNode.Nodes, element);
                    }
                }
            }
      

  2.   

    读 treeview 里面的 treenode.text 域就是显示的文本。按树的结构进行迭代。使用 XMLWriter 类进行写XML文件。TreeView 类TreeNode 类XmlWriter 类用 XmlWriter 编写 XML
      

  3.   

     class TreeExXMLCls
        {
            private TreeView thetreeview;
            private string xmlfilepath;
            XmlTextWriter textWriter;
            XmlNode Xmlroot;
            XmlDocument textdoc;
            public TreeExXMLCls()
            {
                textdoc = new XmlDocument();
            }
            public int TreeToXML(TreeView TheTreeView, string XMLFilePath)
            {
                thetreeview = TheTreeView;
                xmlfilepath = XMLFilePath;
                textWriter = new XmlTextWriter(xmlfilepath, null);
                textWriter.Formatting = Formatting.Indented;
                textWriter.WriteStartDocument();
                textWriter.WriteComment("this XML is created from a tree");
                textWriter.WriteComment("");
                textWriter.WriteStartElement("TreeExXMLCls");
                textWriter.WriteEndElement();
                textWriter.WriteEndDocument();
                textWriter.Close();
                textdoc.Load(xmlfilepath);
                XmlElement Xmlnode=textdoc.CreateElement(thetreeview.Nodes[0].Text);
                Xmlroot = textdoc.SelectSingleNode("TreeExXMLCls");
                TransTreeSav(thetreeview.Nodes, (XmlElement)Xmlroot);
                return 0;
            }
            private int TransTreeSav(TreeNodeCollection nodes, XmlElement ParXmlnode) 
            {
                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;
            }
            public int XMLToTree(string XMLFilePath,TreeView TheTreeView)
            {
                thetreeview = TheTreeView;
                xmlfilepath = XMLFilePath;
                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)
            {
                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;
            }
        }
    参考
      

  4.   

                XmlDocument computerXml = new XmlDocument();
                computerXml.Load("../../computer.xml");
                XmlNode root = computerXml.DocumentElement;
                TreeNode tvRoot=null;
                TreeNode tvContent;
                foreach (XmlNode sort in root.ChildNodes) {
                    foreach (XmlNode s in sort.ChildNodes) {
                       switch(s.Name){
                           case "Name":
                               //Console.WriteLine(s.InnerText);
                               tvRoot = treeView1.Nodes.Add(s.InnerText);
                               break;
                           case "Content":
                               foreach(XmlNode x in s.ChildNodes){
                                   switch (x.Name) { 
                                       case "Title":
                                          // Console.WriteLine(x.InnerText);
                                           tvContent = tvRoot.Nodes.Add(x.InnerText);
                                           break;
                                       //case "Database":
                                       //   Console.WriteLine(x.InnerText);
                                       //  break;
                                   }
                               }
                               break;
                       }
                    }
                    
                }