2010-08-09 64 views
17

Quiero fusionar dos XmlDocument s insertando un segundo documento XML al final de un Xmldocument existente en C#. ¿Cómo se hace esto?Cómo fusionar dos XmlDocuments en C#

+0

He intentado editar su pregunta para que quede más clara. Espero no haber cambiado el significado de lo que estabas tratando de preguntar. –

+1

Gracias. he encontrado una solución sin ciclo: XmlNode footerNode = a.CreateElement ("ADD"); footerNode.InnerXml = b.SelectSingleNode ("/ root"). InnerXml; a.DocumentElement.AppendChild (footerNode); –

+0

Tenga en cuenta que este sitio no es un servicio de escritura de código. Si [editar] su pregunta para describir lo que ha intentado lejos y dónde está atascado, entonces podemos intentar ayudar con problemas específicos. También deberías leer [preguntar]. –

Respuesta

27

Algo como esto:

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

Tenga en cuenta que esto ignora el elemento del documento en sí del documento B, por lo que si tiene un nombre de elemento diferente o atributos sobre los que desea copiar, deberá resolver exactamente lo que desea hacer.

EDIT: Si, de acuerdo con su comentario, que desea incrustar el toda del documento B en el documento A, que es relativamente fácil:

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

Esto todavía va a ignorar cosas como la declaración XML del documento B, si lo hay, no sé qué ocurriría si intentara importar el documento como como un nodo de un documento diferente, e incluye una declaración XML ... pero sospecho que hará lo que quiera. .

2

Malas noticias. Siempre que los documentos xml tengan solo un elemento raíz, no se puede colocar el contenido de un documento al final del segundo. ¿Tal vez this es lo que estás buscando? Esto demuestra la facilidad con que se puede combinar archivos XML utilizando LINQ to XML

Alternativamente, si usted está utilizando XmlDocuments puede intentar hacerlo de esta manera:

XmlDocument documentA; 
XmlDocument documentB; 

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

Quiero agregar el b XmlDocument como nodo de un Xmldocument –

15

Insertar un documento XML completo al final de otro documento XML garantiza la producción de XML no válido. XML requiere que haya un solo elemento de "documento". Así, en el supuesto de que sus archivos fueron los siguientes:

a.xml

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

B.xml

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

El documento resultante mediante simplemente añadiendo uno al final de la otro:

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

es XML no válido.

Suponiendo, en cambio, que los dos documentos tienen un elemento documento común, y que desea insertar los hijos del elemento documento a partir de B en el elemento de documento de A, se puede utilizar el siguiente:

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); 
} 

Este producirá el siguiente documento dado mis ejemplos más arriba:

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

usando System.Xml – MacGyver

3

Esta es la forma más rápida de combinar documentos xml.

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