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).