【问题标题】:How to merge two XmlDocuments in C#如何在 C# 中合并两个 XmlDocument
【发布时间】:2010-08-09 12:42:21
【问题描述】:

我想通过将第二个 XML 文档插入到 C# 中现有 Xmldocument 的末尾来合并两个 XmlDocuments。这是怎么做到的?

【问题讨论】:

  • 我试图编辑您的问题以使其更清楚。我希望我没有改变你想要问的意思。
  • 谢谢。我找到了一个没有循环的解决方案: XmlNode footerNode = a.CreateElement("ADD"); footerNode.InnerXml = b.SelectSingleNode("/root").InnerXml; a.DocumentElement.AppendChild(footerNode);
  • 请注意,本网站不是代码编写服务。如果您edit您的问题描述了您到目前为止所尝试的内容以及您遇到的问题,那么我们可以尝试帮助解决具体问题。您还应该阅读How to Ask

标签: c# .net xml


【解决方案1】:

类似这样的:

foreach (XmlNode node in documentB.DocumentElement.ChildNodes)
{
    XmlNode imported = documentA.ImportNode(node, true);
    documentA.DocumentElement.AppendChild(imported);
}

请注意,这将忽略文档 B 的文档元素本身 - 因此,如果它具有不同的元素名称或您想要复制的属性,您需要准确地确定您想要做什么。

编辑:如果根据您的评论,您希望将文档 B 的 整个 嵌入文档 A 中,这相对容易:

XmlNode importedDocument = documentA.ImportNode(documentB.DocumentElement, true);
documentA.DocumentElement.AppendChild(importedDocument);

这仍然会忽略诸如文档 B 的 XML 声明(如果有)之类的内容 - 我不知道如果您尝试将文档 itself 作为不同文档的节点导入会发生什么,并且它包含一个 XML 声明......但我怀疑这会做你想要的。

【讨论】:

    【解决方案2】:

    在另一个 XML 文档的末尾插入整个 XML 文档实际上可以保证生成无效的 XML。 XML 要求只有一个“文档”元素。所以,假设你的文件如下:

    A.xml

    <document>
       <element>value1</element>
       <element>value2</element>
    </document>
    

    B.xml

    <document>
       <element>value3</element>
       <element>value4</element>
    </document>
    

    在另一个末尾附加一个生成的文档:

    <document>
       <element>value1</element>
       <element>value2</element>
    </document>
    <document>
       <element>value3</element>
       <element>value4</element>
    </document>
    

    XML 无效。

    假设这两个文档共享一个共同的文档元素,并且您想将 B 中的文档元素的子元素插入到 A 的文档元素中,您可以使用以下命令:

    var docA = new XmlDocument();
    var docB = new XmlDocument();
    
    foreach (var childEl in docB.DocumentElement.ChildNodes) {
        var newNode = docA.ImportNode(childEl, true);
        docA.DocumentElement.AppendChild(newNode);
    }
    

    根据我上面的示例,这将生成以下文档:

    <document>
       <element>value1</element>
       <element>value2</element>
       <element>value3</element>
       <element>value4</element>
    </document>
    

    【讨论】:

      【解决方案3】:

      这是合并 xml 文档最快最干净的方法。

      XElement xFileRoot = XElement.Load(file1.xml);
      XElement xFileChild = XElement.Load(file2.xml);
      xFileRoot.Add(xFileChild);
      xFileRoot.Save(file1.xml);
      

      【讨论】:

        【解决方案4】:

        坏消息。只要 xml 文档只能有一个根元素,您就不能只将一个文档的内容放在第二个文档的末尾。也许this 是您要找的?它展示了使用 Linq-to-XML 合并 xml 文件是多么容易

        或者,如果您使用的是 XmlDocuments,您可以尝试这样:

        XmlDocument documentA;
        XmlDocument documentB;
        
        foreach(var childNode in documentA.DocumentElement.ChildNodes)
           documentB.DocumentElement.AppendChild(childNode);
        

        【讨论】:

        • 我想将 b XmlDocument 添加为 Xmldocument 的节点
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-06
        • 1970-01-01
        相关资源
        最近更新 更多