php xml merge simplexml

php - Fusiona dos archivos XML recursivamente



merge simplexml (2)

Quiero fusionar 2 archivos XML en uno recursivamente. Por ejemplo :

1er archivo:

<root> <branch1> <node1>Test</node1> </branch1> <branch2> <node>Node from 1st file</node> </branch2> </root>

Segundo archivo:

<root> <branch1> <node2>Test2</node2> </branch1> <branch2> <node>This node should overwrite the 1st file branch</node> </branch2> <branch3> <node> <subnode>Yeah</subnode> </node> </branch3> </root>

Archivo fusionado:

<root> <branch1> <node1>Test</node1> <node2>Test2</node2> </branch1> <branch2> <node>This node should overwrite the 1st file branch</node> </branch2> <branch3> <node> <subnode>Yeah</subnode> </node> </branch3> </root>

Quiero que el segundo archivo se agregue al primer archivo. Por supuesto, la fusión se puede hacer con cualquier profundidad del XML.

He buscado en Google y no encontré una secuencia de comandos que funcionó correctamente.

Puedes ayudarme por favor ?


Esta es una buena solución desde los comentarios en la página de manual de PHP , trabajando también con atributos también:

function append_simplexml(&$simplexml_to, &$simplexml_from) { foreach ($simplexml_from->children() as $simplexml_child) { $simplexml_temp = $simplexml_to->addChild($simplexml_child->getName(), (string) $simplexml_child); foreach ($simplexml_child->attributes() as $attr_key => $attr_value) { $simplexml_temp->addAttribute($attr_key, $attr_value); } append_simplexml($simplexml_temp, $simplexml_child); } }

También hay una muestra de uso.


xml2array es una función que convierte un documento xml en una matriz. Una vez que se crean las dos matrices, puede usar array_merge_recursive para fusionarlas. Luego puede convertir la matriz a xml con XmlWriter (ya debería estar instalado).