其中一个XML文件内容XML1:<?xml version="1.0" encoding="UTF-16"?>
<items>
  <Rows>
    <task>20120702A</task>
    <course>我们的预算用完了0313</course>
    <sendtime>2012-7-2 10:20:26</sendtime>
    <status>已完成</status>
    <username>drinker.yu</username>
    <useremail>[email protected]</useremail>
    <dept>IT</dept>
    <score>20</score>
  </Rows>
</items>
另一个XML文件内容XML2<?xml version="1.0" encoding="UTF-16"?>
<items>
  <Rows>
    <task>平台试用课程0627——你天生就是好销售 </task>
    <course>你天生就是个好销售</course>
    <sendtime>2012-6-27 9:00:00</sendtime>
    <status>已完成</status>
    <username>张三</username>
    <useremail>[email protected]</useremail>
    <dept>PBU营销中心</dept>
    <score>71</score>
  </Rows>
</items>
现在我将这2个XML追加成1个XML。代码如下: try
            {
                DataSet ds = new DataSet();
                DataSet ds2 = new DataSet(); 
                string[] files = Directory.GetFiles(@"C:\\Users\\Pangoo\\Desktop\\XMLzj", "*.xml");
                foreach (string file in files)
                {   
                    XmlTextReader xmlreader1 = new XmlTextReader(file);           
                    ds2.ReadXml(xmlreader1);                               
                }
                ds.Merge(ds2);
                ds.WriteXml("C:\\Users\\Pangoo\\Desktop\\XMLzj1\\Books.xml");
                Console.WriteLine("Completed merging XML documents");
            }
            catch (System.Exception ex)
            { Console.Write(ex.Message); }
            Console.Read();上面的C#实现了将某个路径的多个XML文件追加为1个xml。
但问题出现了,追加后的结果为:
XML标头由<?xml version="1.0" encoding="UTF-16"?>变为了<?xml version="1.0" standalone="yes"?>
而且<items></item>变成了<NewDataSet></NewDataSet>求救,我应该如何修改C#代码,实现合并后的XML标头与未合并的XML标头一样<?xml version="1.0" encoding="UTF-16"?>谢谢大家,在线等了。

解决方案 »

  1.   

    XML标头问题看看这篇文章:
    Adding the XML Declaration when calling DataSet.WriteXml(Stream stream) method
    http://moiashvin-tech.blogspot.com.au/2009/05/adding-xml-declaration-when-calling.html
      

  2.   

    后面的问题,设置一下ds的DataSetName 属性试一试。
      

  3.   


    findcaiyzh
    (秋心)
    你好,这个地址打不开
      

  4.   

    我做的下测试,代码:XMLFile1.xml和XMLFile2.xml的内容就是你问题里的内容。private void button2_Click(object sender, EventArgs e)
            {
                
                try
                {
                    DataSet ds = new DataSet();
                    DataSet ds2 = new DataSet();
                    ds.ReadXml("XMLFile1.xml");
                    ds2.ReadXml("XMLFile2.xml");
                    ds.Merge(ds2);
                    using (XmlTextWriter stream = new XmlTextWriter(@"Books.xml", Encoding.Unicode))
                    {
                        stream.WriteStartDocument();
                        ds.WriteXml(stream);
                    }
                    Console.WriteLine("Completed merging XML documents");
                }
                catch (System.Exception ex)
                { 
                    Console.Write(ex.Message); 
                }
                Console.Read();
            }
    输出:<?xml version="1.0" encoding="utf-16"?>
    <items>
      <Rows>
        <task>20120702A</task>
        <course>我们的预算用完了0313</course>
        <sendtime>2012-7-2 10:20:26</sendtime>
        <status>已完成</status>
        <username>drinker.yu</username>
        <useremail>[email protected]</useremail>
        <dept>IT</dept>
        <score>20</score>
      </Rows>
      <Rows>
        <task>平台试用课程0627——你天生就是好销售 </task>
        <course>你天生就是个好销售</course>
        <sendtime>2012-6-27 9:00:00</sendtime>
        <status>已完成</status>
        <username>张三</username>
        <useremail>[email protected]</useremail>
        <dept>PBU营销中心</dept>
        <score>71</score>
      </Rows>
    </items>
    没有你说的NewDataSet的问题。我估计ds读取数据的时候有点问题。
      

  5.   

    另外Dataset也实现了IDispose接口,需要调用Dispose ()或者使用using.