我用以下代码将一组FORM的数据存储到XML文档可以实现,但是当我再次调用该函数的时候,就会覆盖前面保存的数据,如果我想在以保存的数据下面继续保存写入的数据改怎么写,麻烦个位帮个忙指点下,呵呵~!!!  
        public  void XmlDocument()
        {            string ServerIp = this.ServerIpBox.Text;
            string ServerName = this.ServerNameBox.Text;
            string ServerPort = this.ServerPortBox.Text;
            string UserName = this.UserNameBox.Text;
            string UserPwd = this.UserPwdBox.Text;            XmlDocument doc = new XmlDocument();
            XmlElement friendsinfo = doc.CreateElement("ViewManage");
            XmlDeclaration sm = doc.CreateXmlDeclaration("1.0", "GB2312", "no");
            doc.AppendChild(sm);
            doc.AppendChild(friendsinfo);            XmlElement hy = doc.CreateElement("ViewPara");
            hy.SetAttribute("nodeText", ServerName);
           
            XmlElement ip = doc.CreateElement("IP");
            ip.AppendChild(doc.CreateTextNode(ServerIp));
            hy.AppendChild(ip);            XmlElement port = doc.CreateElement("Port");
            port.AppendChild(doc.CreateTextNode(ServerPort));
            hy.AppendChild(port);            XmlElement name = doc.CreateElement("Username");
            name.AppendChild(doc.CreateTextNode(UserName));
            hy.AppendChild(name);            XmlElement PassWord = doc.CreateElement("UserPwd");
            PassWord.AppendChild(doc.CreateTextNode(UserPwd));
            hy.AppendChild(PassWord);            friendsinfo.AppendChild(hy);            doc.Save("ViewConfig.xml");
        }

解决方案 »

  1.   

    两点:
    1。确认在指定路径找ViewConfig.xml文件,如果文件不存在就用你现在的方式,添加数据,保存文件;
    2。如果文件存在,则需要先读取ViewConfig.xml这个文件,然后在节点数据后增加新数据结点,然后再保存文件。
      

  2.   

     //xmlPath,xml所在位置
     //parentNode,要插入节点的父节点名称
     public static void AppendXML(string xmlPath, string parentNode)
      {
      XmlDocument doc=new XmlDocument();
      doc.Load(xmlPath);
      //创建一个新的menber节点并将它添加到根节点下
      XmlElement xel= doc.CreateElement(parentNode);
      doc.DocumentElement.PrependChild(xel);
      doc.Save(xmlPath);
      }
      

  3.   

    if (File.Exists("ViewConfig.xml"))
    {
       dsXML.ReadXml("ViewConfig.xml");
    }
    Xmls(ServerName, ServerIp, ServerPort, UserName, UserPwd);
    DataRow xmlRow = dsXML.Tables["ViewPara"].NewRow();
    xmlRow["Name"] = this.ServerNameBox.Text;
    xmlRow["IP"] = this.ServerIpBox.Text;
    xmlRow["Port"] = this.ServerPortBox.Text;
    xmlRow["Username"] = this.UserNameBox.Text;
    xmlRow["UserPwd"] = this.UserPwdBox.Text;
    dsXML.Tables["ViewPara"].Rows.Add(xmlRow);
    dsXML.WriteXml(@"ViewConfig.xml");
    我用以上方法可以将数据直接写到已有的数据后面,但是确不知道能不能将xmlRow["Name"] = this.ServerNameBox.Text的值作为属性写到"ViewPara"的后面,就像这段代码实现的功能 XmlElement hy = doc.CreateElement("ViewPara");hy.SetAttribute("nodeText", ServerName);还能高手解惑~!
      

  4.   


    <?xml version="1.0" encoding="GB2312" standalone="no"?>
    <ViewManagement>
      <ViewPara>
        <Name>1</Name>
        <IP>1</IP>
        <Port>1</Port>
        <Username>1</Username>
        <UserPwd>1</UserPwd>
      </ViewPara>
    </ViewManagement>你的parentNode参数指的是<ViewManagement>还是<ViewPara>啊?
      

  5.   

    我试了一下,确实可以在根节点下生成一个新的<ViewPara/>,但是我如何将我的数据写到他的下面呢?
      

  6.   

    说错了parentNode代表创建的节点的名称 类似于这里的<Name>、<ViewPara>.
    上面那种方法只能添加到xml的根目录与你的<ViewManagement>节点平级。
    你是想要添加到哪里啊?
      

  7.   

    //xmlPath,xml所在位置
            //parentNode,要插入节点的父节点名称
            public  void AppendXML(string xmlPath, string parentNode)
            {
                string ServerIp = this.ServerIpBox.Text;
                string ServerName = this.ServerNameBox.Text;
                string ServerPort = this.ServerPortBox.Text;
                string UserName = this.UserNameBox.Text;
                string UserPwd = this.UserPwdBox.Text;            XmlDocument doc = new XmlDocument();
                doc.Load(xmlPath);
                //创建一个新的menber节点并将它添加到根节点下
                XmlElement xel = doc.CreateElement(parentNode);
                xel.SetAttribute("nodeText", ServerName);
                doc.DocumentElement.PrependChild(xel);
                           XmlElement ip = doc.CreateElement("IP");
                ip.AppendChild(doc.CreateTextNode(ServerIp));
                xel.AppendChild(ip);            XmlElement port = doc.CreateElement("Port");
                port.AppendChild(doc.CreateTextNode(ServerPort));
                xel.AppendChild(port);            XmlElement name = doc.CreateElement("Username");
                name.AppendChild(doc.CreateTextNode(UserName));
                xel.AppendChild(name);            XmlElement PassWord = doc.CreateElement("UserPwd");
                PassWord.AppendChild(doc.CreateTextNode(UserPwd));
                xel.AppendChild(PassWord);
                doc.Save(xmlPath);
            }
    这是我改后的代码
    结果如下:
    - <ViewManage>
    - <ViewPara nodeText="2">
      <IP>2</IP> 
      <Port>2</Port> 
      <Username>2</Username> 
      <UserPwd>2</UserPwd> 
      </ViewPara>
    - <ViewPara nodeText="1">
      <IP>1</IP> 
      <Port>1</Port> 
      <Username>1</Username> 
      <UserPwd>1</UserPwd> 
      </ViewPara>
      </ViewManage>
      

  8.   

    不知道插入的顺序可以改变不,就是<ViewPara nodeText="1">
    永远在第一位,然后在它的下面<ViewPara nodeText="2"><ViewPara nodeText="3">以此类推这样写下去?
      

  9.   

      把doc.DocumentElement.PrependChild(xel);
    改成doc.DocumentElement.AppendChild(xel);试试