写load部分感觉自己能做点。写save部分就不知道咋写了,希望大家给与帮忙,
   /*
    * 加载参数
    */
        public void LoadPara()
        {            
            XmlDocument myXmlDocument = new XmlDocument();
            String sAppIni = Application.StartupPath + "\\" + Application.ProductName + ".xml";
            try
            {                
                myXmlDocument.Load(sAppIni);
            }
            catch
            {
                MessageBox.Show("请检查文件是否存在:" + sAppIni);
                return;
            }            XmlNodeList nodeList;
            nodeList = myXmlDocument.SelectSingleNode("chm").ChildNodes;          
            //遍历所有子节点
            foreach (XmlNode x in nodeList)
            {
                getchildNode(x);
            }
            
        }        public void getchildNode(XmlNode nodelist)
        {
            XmlNodeList myNodeList;
            myNodeList = nodelist.SelectSingleNode("Node").ChildNodes;
            foreach (XmlNode x in myNodeList)
            {
                if (x.HasChildNodes)
                {
                    getchildNode(x);
                }
                else
                {
                    XmlElement xe = (XmlElement)x;
                    if (xe.Name == "Node")
                    {
                    }
                    if (xe.Name == "file")
                    {
                    }
                }
            }
        }

解决方案 »

  1.   

    我之前的做法是
    xml解析到内存的一个中间容器中(可以自己定义一个结构体)
    之后 中间容器和treeview关联
    treeview改动之后,改变中间容器,再写成xml
      

  2.   

    http://www.codeproject.com/cs/miscctrl/treeviewxml.asp
    这个?
      

  3.   

    真的是我想要的那样。谢谢youngc527啊,
    我刚在国内搜了半天,没发现几个人把这个问题讲清楚的,有也是提个问,没下文。是大家都会搞而止于问呢,还是太复杂呢。我只是刚转到。net搞,觉得这是个简单的问题阿,咋大家都没人吭一声的。
     我写好贴一个完整的给大家。
      

  4.   

    直接把下面的代码放在一个单元文件就可以了。测试无误。再次感谢young527及其原作者using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Windows.Forms;using System.Xml;
    using System.Text;
    using System.IO;
    /// <summary>
    /// 改自http://www.codeproject.com/cs/miscctrl/treeviewxml.asp
    /// 原作者:UsualDosage. 
    /// 改:    kenlistian
    /// </summary>namespace xml2tree
    {public class Xml2TreeList
    {
        private XmlTextWriter xr;
        string xmlfile; public Xml2TreeList(string filename)
    {
            xmlfile = filename;
            if (xmlfile == "")
            {
                xmlfile = Application.ProductName + ".xml";
            }
    }    //写到xml文件中
        public void ToXml(TreeView tv,string sFileName)
        {
            if (sFileName == "")
                sFileName = xmlfile;
            xr = new XmlTextWriter(sFileName, System.Text.Encoding.UTF8);
            xr.WriteStartDocument();
            xr.WriteStartElement(tv.Nodes[0].Text);
            foreach (TreeNode node in tv.Nodes)
            {
                saveNode2(node.Nodes);
            }        xr.WriteEndElement();
            xr.Close();
        }    //从xml文件中读出到treeview中
        // sFileName  读取的文件名
        // TreeView   传入的控件树
        public bool ToTreeView(TreeView tv, string sFileName)
        {
            if (sFileName == "")
                sFileName = xmlfile;
            try
            {
                XmlDocument xDoc = new XmlDocument();
                xDoc.Load(sFileName);
                tv.Nodes.Clear();            tv.Nodes.Add(new TreeNode(xDoc.DocumentElement.Name));            TreeNode tNode = new TreeNode();
                tNode = (TreeNode)tv.Nodes[0];            addTreeNode(xDoc.DocumentElement, tNode);
                tv.ExpandAll();
            }
            catch (XmlException xExc)
            {
                // sMsg = xExc.Message;
                return false;
            }
            catch (Exception ex)
            {
                //sMsg = ex.Message
                return false;        }
            finally
            {        }
            return true;
        }    //
        private void saveNode2(TreeNodeCollection tnc)
        {
            foreach (TreeNode node in tnc)
            {
                if (node.Nodes.Count > 0)
                {
                    xr.WriteStartElement(node.Text);
                    saveNode2(node.Nodes);
                    xr.WriteEndElement();
                }
                else
                {
                    xr.WriteString(node.Text);
                }
            }
        }
        //
        private void addTreeNode(XmlNode xmlNode, TreeNode treeNode)
        {
            XmlNode xNode;
            TreeNode tNode;
            XmlNodeList xNodeList;
            if (xmlNode.HasChildNodes)
            {
                xNodeList = xmlNode.ChildNodes;
                for (int x = 0; x <= xNodeList.Count - 1; x++)
                {
                    xNode = xmlNode.ChildNodes[x];
                    treeNode.Nodes.Add(new TreeNode(xNode.Name));
                    tNode = treeNode.Nodes[x];
                    addTreeNode(xNode, tNode);
                }
            }
            else
                treeNode.Text = xmlNode.OuterXml.Trim();
        }}/* 采用XmlTextWriter方法是一种写xml文件的方法
     * 采用StreamWriter 方法也是一种xml文件的方法 
     
    private StreamWriter sr;public void exportToXml(TreeView tv, string filename) 
    {
        sr = new StreamWriter(filename, false, System.Text.Encoding.UTF8);
        //Write the header
        sr.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
        //Write our root node
        sr.WriteLine("<" + treeView1.Nodes[0].Text + ">");
        foreach (TreeNode node in tv.Nodes)
        {
            saveNode(node.Nodes);
        }
        //Close the root node
        sr.WriteLine("</" + treeView1.Nodes[0].Text + ">");
        sr.Close();
    }private void saveNode(TreeNodeCollection tnc)
    {
        foreach (TreeNode node in tnc)
        {
            //If we have child nodes, we'll write 
            //a parent node, then iterrate through
            //the children
            if (node.Nodes.Count > 0)
            {
                sr.WriteLine("<" + node.Text + ">");
                saveNode(node.Nodes);
                sr.WriteLine("</" + node.Text + ">");
            } 
            else //No child nodes, so we just write the text
                sr.WriteLine(node.Text);
        }
    }
     */}