//循环体
.................
.................
.................           
 SqlDataAdapter da = new SqlDataAdapter(select, connection);
            DataSet ds = new DataSet();
            da.Fill(ds, "stockup");
            ds.WriteXml("write7.xml", XmlWriteMode.WriteSchema);          
//循环结束在循环体中执行的是SQL查询
我想把每次的查询结果都保存到write7.xml中,但是现在只能把最后一次的查询结果保存下来,前面的查询结果都被覆盖了,请大侠们帮忙解答。  

解决方案 »

  1.   

    WriteXml(string, XmlWriteMode);这个是写整个xml文档的,当然是覆盖啊!
      

  2.   

    自己写代码,循环添加xml节点~
      

  3.   

    先把xml文件读到内存,再添加结点,再保存就行了
      

  4.   


      <?xml version="." encoding="gb"?>
      <bookstore>
      <book genre="fantasy" ISBN="--">
      <title>Oberon's Legacy</title>
      <author>Corets, Eva</author>
     <price>.</price>
     </book>
     </bookstore>
     
     
     
     
     
     1、往<bookstore>节点中插入一个<book>节点:
     XmlDocument xmlDoc=new XmlDocument();
     xmlDoc.Load("bookstore.xml");
     XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore> XmlElement xe=xmlDoc.CreateElement("book");//创建一个<book>节点
     xe.SetAttribute("genre","李小龙");//设置该节点genre属性
     xe.SetAttribute("ISBN","--");//设置该节点ISBN属性
     
     XmlElement xesub=xmlDoc.CreateElement("title");
     xesub.InnerText="CS从入门到精通";//设置文本节点
     xe.AppendChild(xesub);//添加到<book>节点中
     XmlElement xesub=xmlDoc.CreateElement("author");
     xesub.InnerText="候捷";
     xe.AppendChild(xesub);
     XmlElement xesub=xmlDoc.CreateElement("price");
     xesub.InnerText=".";
     xe.AppendChild(xesub);
     
     root.AppendChild(xe);//添加到<bookstore>节点中
     xmlDoc.Save("bookstore.xml");
     
     
     //================
     结果为:
     
     
     
     
     <?xml version="." encoding="gb"?>
     <bookstore>
     <book genre="fantasy" ISBN="--">
     <title>Oberon's Legacy</title>
     <author>Corets, Eva</author>
     <price>.</price>
     </book>
     <book genre="李小龙" ISBN="--">
     <title>CS从入门到精通</title>
     <author>候捷</author>
     <price>.</price>
     </book>
     </bookstore>
     
     
     
     
     
     2、修改节点:将genre属性值为“李小龙“的节点的genre值改为“update李小龙”,将该节点的子节点<author>的文本修改为“亚胜”。
     
     
     XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
     foreach(XmlNode xn in nodeList)//遍历所有子节点
     {
     XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
     if(xe.GetAttribute("genre")=="李小龙")//如果genre属性值为“李赞红”
     {
     xe.SetAttribute("genre","update李小龙");//则修改该属性为“update李赞红”
     
     XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
     foreach(XmlNode xn in nls)//遍历
     {
     XmlElement xe=(XmlElement)xn;//转换类型
     if(xe.Name=="author")//如果找到
     {
     xe.InnerText="亚胜";//则修改
     break;//找到退出来就可以了
     }
     }
     break;
     }
     }
     
     xmlDoc.Save("bookstore.xml");//保存。
     
     
     //=================最后结果为:
    <?xml version="." encoding="gb"?>
    <bookstore>
    <book genre="fantasy" ISBN="--">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>.</price>
    </book>
    <book genre="update李小龙" ISBN="--">
    <title>CS从入门到精通</title>
    <author>亚胜</author>
    <price>.</price>
    </book>
    </bookstore>
    3、删除 <book genre="fantasy" ISBN="--">节点的genre属性,删除 <book genre="update李赞红" ISBN="--">节点。
    XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;foreach(XmlNode xn in xnl)
    {
    XmlElement xe=(XmlElement)xn;
    if(xe.GetAttribute("genre")=="fantasy")
    {
    xe.RemoveAttribute("genre");//删除genre属性
    }
    else if(xe.GetAttribute("genre")=="update李小龙")
    {
    xe.RemoveAll();//删除该节点的全部内容
    }
    }
    xmlDoc.Save("bookstore.xml");//====================最后结果为:
    <?xml version="." encoding="gb"?>
    <bookstore>
    <book ISBN="--">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>.</price>
    </book>
    <book>
    </book>
    </bookstore> 
    4、显示所有数据。
    XmlNode xn=xmlDoc.SelectSingleNode("bookstore");XmlNodeList xnl=xn.ChildNodes;foreach(XmlNode xnf in xnl)
    {
    XmlElement xe=(XmlElement)xnf;
    Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
    Console.WriteLine(xe.GetAttribute("ISBN"));XmlNodeList xnf=xe.ChildNodes;
    foreach(XmlNode xn in xnf)
    {
    Console.WriteLine(xn.InnerText);//显示子节点点文本
    }

     
      

  5.   

    别人已经说得很清楚了,你需要做得只是首先把xml读成xmldocument然后用xml读写类来加入节点,然后再写文件就是了...
    你要完全抛弃用dataset.WriteXml()的思路...
      

  6.   

    只有第一次创建XML文档,以后的都不创建文档,只创建节点。最后就是一个完整的文档呀。
      

  7.   

    别人给你贴出来了,还说别人答非所问.....我觉得这个就是你要的:1、往<bookstore>节点中插入一个<book>节点:自己好好看一下.......
    <sqlcoll>
      <sql>....</sql>
      <sql>....</sql>
      <sql>....</sql>
    </sqlcoll>每次只要添加一个sql节点就可以了......
      

  8.   

    11楼,循环中每次查询出来的结果都是一个结果集,并不是例子中的需要指定每一个结点的内容,那样的话我也指定不过来,我现在是想把每次的查询结果都保存到一个XML里。
      

  9.   

    ds.WriteXml() 每个DataSet对象用这个方法 都会产生一个xml文件 只是你用了同一个文件名write7.xml所以后一次就替换了前一次的1.要么循环的时候就改掉文件名,用多个xml文件来存储2.多个DataSet写入一个xml,如果没提供什么直接的方法,那就循环的来 一条一条的写.....转来转去 还是要用到1、往 <bookstore>节点中插入一个 <book>节点: 
      

  10.   

    我想到一个方法,不知道是否可行,DataSet 里面存的是DataTable循环一次,你把DataSet中的DataTable存到另外一个新DataSet中去,循环一次写一次,等循环结束时 在ds.WriteXml()方法 不知道ds.WriteXml() 是否支持DataSet包含多个DataTable的.....//自己去测试下