XmlReader、XmlWriter - 使用流连接 xmlFiles

XmlReader,XmlWriter - concat xmlFiles using streams

我有一些 return xml 文件的程序。

是否可以仅使用流连接多个 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);
                   }
              }
          }

     }

我需要在不使用字符串的情况下执行此操作,因为我必须处理大文件。

如果您不想使用字符串,那么为什么要使用 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();

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

因此在您的代码中您可以使用

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

只要您确保输出根元素包装器(或者使用带有 XmlWriterSettings 和 ConformanceLevel.Fragment 的 XmlWriter)。