【问题标题】:Merge XML files in a XDocument在 XDocument 中合并 XML 文件
【发布时间】:2008-11-11 08:14:55
【问题描述】:

我正在尝试将多个 XML 文件合并到一个 XDocument 对象中。

XDocument 对象中不存在合并。我想念这个。

是否有人已经为 XDocument 实现了 Merge 扩展方法或类似的方法?

【问题讨论】:

    标签: c# xml linq-to-xml


    【解决方案1】:

    我自己试了一下:

    var MyDoc = XDocument.Load("File1.xml");
    MyDoc.Root.Add(XDocument.Load("File2.xml").Root.Elements());
    

    我不知道它是好是坏,但它对我来说很好:-)

    【讨论】:

      【解决方案2】:

      务实,XDocumentXmLDocument 不是全有或全无(除非你在 Silverlight 上) - 所以如果 XmlDoucument 做了你需要的事情,而 XDocument 没有,那么也许使用XmlDocument(与 ImportNode 等)。

      也就是说,即使使用XDocument,您也可以使用XNode.ReadFrom 导入每个,然后只需.Add 将其导入主集合。

      当然,如果文件很大,XmlReader/XmlWriter 可能更高效……但更复杂。幸运的是,XmlWriter 有一个接受XmlReaderWriteNode 方法,因此您可以导航到XmlReader 中的第一个孩子,然后将其快速发送到输出文件。比如:

          static void AppendChildren(this XmlWriter writer, string path)
          {
              using (XmlReader reader = XmlReader.Create(path))
              {
                  reader.MoveToContent();
                  int targetDepth = reader.Depth + 1;
                  if(reader.Read()) {
                      while (reader.Depth == targetDepth)
                      {
                          writer.WriteNode(reader, true);
                      }                
                  }
              }
          }
      

      【讨论】:

      • 非常感谢 :) 我想我找到了可以用更少代码工作的东西。
      【解决方案3】:

      将目录中的所有xml文件合并到一个XDocument

      public static XDocument MergeDir(string xmlDir)
      {
          XDocument xdoc = XDocument.Parse("<root></root>");
          System.IO.DirectoryInfo directory = new DirectoryInfo(xmlDir);
          if (directory.Exists)
          {
              foreach (System.IO.FileInfo file in directory.GetFiles())
              {
                  if (file.Extension == ".xml")
                  {
                      xdoc.Root.Add(XDocument.Load(file.FullName).Root.Elements());
                  }
              }
          }
      
          return xdoc;
      }
      

      【讨论】:

        【解决方案4】:

        作为一种解决方法,您可以使用 XSL 文件来合并 XML 文件,然后将其转换为 XDocument 对象。

        【讨论】:

        • 谢谢。对不起,我讨厌 XSL。我肯定更喜欢基于 c# 代码的解决方案。
        • 没问题,我理解避免使用 XSL,因为它有时会非常令人困惑。
        猜你喜欢
        • 2012-04-27
        • 2012-09-28
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-08
        相关资源
        最近更新 更多