我是通过FOR XML的SQL语句得到的一个XmlReader,现在想把它Load到一个XmlDocument里面,但是这段XML有多个根节点,所以需要在上面再加一个根节点才可以,否则XmlDocument.Load的时候就会提示“此文档已具有 DocumentElement 节点。”我现在得做法是,创建一个XmlDocument,然后CreateElement("Root"),然后把原来的XML插入,但是最后一步不知道怎么做,望大虾们指点,我现在得代码如下:
xdTemp.CreateElement("Root");
XmlNode xnRoot = xdTemp.CreateElement("Root");
xdTemp.AppendChild(xnRoot); while (xrdr.Read())
{
XmlElement xe = xdTemp.CreateElement(xrdr.Name);
xe.InnerXml = xrdr.ReadInnerXml();
xdTemp.DocumentElement.AppendChild(xe);

}

解决方案 »

  1.   

    try:StringBuilder sb = new StringBuilder();
    while (!reader.EOF)
    {
    if(reader.IsStartElement())
     sb.Append(reader.ReadOuterXml());
    }
    reader.Close();XmlDocument xmldoc = new XmlDocument();
    string xmlstr = sb.ToString();
    xmldoc.Load("<root>" + xmlstr + "</root>");
      

  2.   

    方法不难,可以各开 1 个 XmlReader 和 XmlWriter,边读边写。void AddRoot(string XmlFile){
    try{
      string tmpfile=XmlFile + ".tmp";
      XmlReader reader=new XmlReader(XmlFile, System.Text.Encoding.UTF8);
      XmlWriter writer=new XmlWriter(tmpfile, System.Text.Encoding.UTF8);
      writer.WriteStartElement("root");
      reader.MoveToContent(); 
      while( !reader.EOF ){
        writer.WriteNode(reader,false);
      }
      writer.WriterEndElement();
      writer.Close();
      reader.Close();
      System.IO.File.Copy(tmpfile, XmlFile, true);
      System.IO.File.Delete(tmpfle);
    }catch(XmlException ex){
    // 处理 Xml 异常。            
    }catch(System.IO.IOException ex){
    // 处理 文件访问和 IO 异常。
    }
    }
      

  3.   

    先把要加根节点的XML片段和没用加上根节点的片段放到两个临时文件中,再把根节点创建好,然后再依次把内容导入!