2010-08-09 118 views
17

我想通過在C#中現有Xmldocument的末尾插入第二個XML文檔來合併兩個XmlDocument。這是如何完成的?如何在C#中合併兩個XmlDocuments

+0

我試着編輯你的問題,使其更清楚。我希望我沒有改變你想要問的意思。 – 2010-08-09 12:56:36

+1

Thanx。 我找到了一個沒有循環的解決方案: XmlNode footerNode = a.CreateElement(「ADD」); footerNode.InnerXml = b.SelectSingleNode(「/ root」)。InnerXml; a.DocumentElement.AppendChild(footerNode); – 2010-08-09 13:00:31

+0

請注意,這個網站不是一個代碼寫作服務。如果 你[編輯]你的問題來描述你已經嘗試過如此 遠,你卡住的地方,那麼我們可以嘗試幫助 具體問題。你還應該閱讀[問]。 – 2016-04-01 15:13:04

回答

27

事情是這樣的:

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

請注意,這會忽略文檔B的文檔元素本身 - 所以如果它具有不同的元素名稱或要複製的屬性,則需要確切地確定要執行的操作。

編輯:如果按您的意見,您要嵌入文件A內部文檔B的整個,這是比較容易:

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

這仍然會忽略的東西像文檔的XML聲明B如果有一個 - 我不知道如果您試圖將文檔本身作爲不同文檔的節點導入,並且它包含XML聲明會發生什麼情況......但是我懷疑這會做你想做的事。

2

壞消息。只要xml文檔只能有一個根元素,就不能在第二個文檔的末尾放置一個文檔的內容。也許this是你在找什麼?它顯示瞭如何輕鬆就可以使用LINQ到XML

或者,如果你正在使用XmlDocuments你可以嘗試讓這樣的合併XML文件:

XmlDocument documentA; 
XmlDocument documentB; 

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

我想使用System.Xml添加b XmlDocument作爲Xmldocument – 2010-08-09 12:49:32

15

在另一個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中的文檔元素的子元素插入到的文檔元素,你可以使用以下命令:

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> 
+0

的節點 – MacGyver 2016-01-14 20:53:28

3

這是合併xml文檔最快最乾淨的方法。

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