Я хочу объединить 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); } }
Там также пример использования.