<?php
function array_to_xml( $data, &$xml_data ) {
foreach( $data as $key => $value ) {
if (!empty($value)) {
if( is_array($value)) {
if (!empty($value["@attributes"])) {
$subnode = $xml_data->addChild($key, $value["@value"]);
foreach ($value["@attributes"] as $key1 => $val1) {
$subnode->addAttribute($key1, $val1);
}
} else if ($key == "@value") {
foreach ($value as $attr => $attrVal) {
$subnode = $xml_data->addChild("$attr", $attrVal);
array_to_xml($attrVal, $subnode);
}
} else {
if (!empty($value)) {
$subnode = $xml_data->addChild($key);
array_to_xml($value, $subnode);
}
}
} else {
$xml_data->addChild("$key",$value);
}
}
}
}
$xml_data = new SimpleXMLElement('<?xml version="1.0"?><data></data>');
$arrXml = [
"categories" => [
'category' => [
'@attributes' => [
'id' => '123',
'parent_id' => '12345'
],
'@value' => 'Bikes'
]
],
"properties" => [
'property' => [
'id' => '123',
'categoryId' => '1',
'name' => 'Color',
'values' => [
'value' => [
"id" => '1',
"name" => 'Black'
],
'value' => [
"id" => '2',
"name" => 'White'
]
]
]
],
"products" => [
'products' => [
'id' => '1231231',
'categoryId' => '123',
'model' => [
'@attributes' => [
'foo' => 'bar',
],
'@value' => 'Avalanche'
],
'article' => '1.0 2011',
'vendor' => 'GT',
]
]
];
array_to_xml($arrXml,$xml_data);
//saving generated xml file;
$result = $xml_data->asXML('test.xml');