Слияние двух XML-файлов рекурсивно

Я хочу объединить 2 XML-файла в один рекурсивно. Например :

1-й файл:

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

Второй файл:

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

Объединенный файл:

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

Я хочу, чтобы второй файл был добавлен в первый файл. Конечно, слияние может быть выполнено с любой глубиной XML.

Я искал в Google и не нашел сценарий, который работал правильно.

Не могли бы вы мне помочь ?

xml2array – это функция, которая преобразует XML-документ в массив. После создания двух массивов вы можете использовать array_merge_recursive для их объединения. Затем вы можете преобразовать массив обратно в xml с помощью XmlWriter (он уже должен быть установлен).

Это хорошее решение из комментариев на странице руководства PHP , также работающей с атрибутами:

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

Там также пример использования.