2016-03-08 26 views
0

我有一些返回xml文件的过程。XmlReader,XmlWriter - 使用流的concat xmlFiles

是否有可能连接许多XML文件只使用流?

是这样的:

 XmlWriter writer = XmlWriter.Create(sb,settings) 
    { 

      foreach(var cmd in XmlFiles) 
      { 
      using (XmlReader r = cmd.ExecuteXmlReader()) 
      { 
        while (r.Read()) 
        { 
         string xml = r.ReadOuterXml(); 
         writer.WriteRaw(xml); 
        } 
       } 
      } 

    } 

我需要做到这一点,而不使用字符串,因为我要处理大文件。

+2

您不能只连接两个XML文件来生成一个新的XML文件,因为这样做会违反某些要求(例如只有一个根元素)。例如。你试图制作的*不是* XML(尽管表面上有些相似),所以你不应该期望XML工具能够生成它。 –

+0

于是为Concat的这样 ...没有简单的方法...... 得到 \t ... ...... 使用流? – adamo94

回答

2

如果你不想使用字符串,那么你为什么使用ReadOuterXmlWriteRaw?有一种方法WriteNode消耗了通过的XmlReader,因此例如

 string[] inputFiles = { "XMLFile1.xml", "XMLFile2.xml" }; 

     using (XmlWriter xw = XmlWriter.Create("result.xml")) 
     { 
      xw.WriteStartDocument(); 
      xw.WriteStartElement("root"); 
      foreach (string inputFile in inputFiles) 
      { 
       using (XmlReader xr = XmlReader.Create(inputFile)) 
       { 
        xr.MoveToContent(); 
        xw.WriteNode(xr, true); 
       } 
      } 
      xw.WriteEndElement(); 
      xw.WriteEndDocument(); 

将创建一个root元素包裹的两个XML文件的内容,新的XML文档。

在你的代码可以使用,因此

 foreach(var cmd in XmlFiles) 
     { 
     using (XmlReader r = cmd.ExecuteXmlReader()) 
     { 
       r.MoveToContent(); 
       writer.WriteNode(r, false); 
      } 
     } 

只要你确保你输出根元素包装(或您使用与XmlWriterSettings和ConformanceLevel.Fragment一个的XmlWriter)。

+0

谢谢,这就是我一直在寻找的东西。 – adamo94