I'm trying to transform XML into Json with PHP. I have in input an XML file (file.xml) with a recursive structure and I would like to transpose it into Json (out.json). The graph contains a repeated recursive node:
xml file sample:
<Transfer>
<Name>Transfer</Name>
<Title>Transfer + Date</Title>
<Level>
<Name>Item 1</Name>
<Title>Title 1</Title>
<className>middle-level</className>
<Level>
<Name>Item 1.1</Name>
<Title>Title 1.1</Title>
<className>product-dept</className>
</Level>
<Level>
<Name>Item 1.2</Name>
<Title>Title 1.2</Title>
<className>product-dept</className>
<Level>
<Name>Item 1.2.1</Name>
<Title>Title 1.2.1</Title>
<className>pipeline1</className>
<Level>
<Name>Item 1.2.1.1</Name>
<Title>Title 1.2.1.1</Title>
<className>otherClass</className>
</Level>
</Level>
</Level>
</Level>
<Level>
<Name>Item 2</Name>
<Title>Title 2</Title>
<className>middle-level</className>
</Level>
</Transfer>
Json output desired :
{
'name': 'Transfer',
'title': 'transfer Date',
'children': [
{ 'name': 'Item 1', 'title': 'Title 1', 'className': 'middle-level',
'children': [
{ 'name': 'Item 1.1', 'title': 'Title 1.1', 'className': 'product-dept' },
{ 'name': 'Item 1.2', 'title': 'Title 1.2', 'className': 'product-dept',
'children': [
{ 'name': 'Item 1.2.1', 'title': 'Title 1.2.1', 'className': 'pipeline1' ,
'children': [
{ 'name': 'Item 1.2.1.1', 'title': 'Title 1.2.1.1', 'className': 'otherClass' },
]
]
}
]
},
{ 'name': 'Item 2', 'title': 'Title 2', 'className': 'middle-level'}
]
}
All this with php code :
$xml = simplexml_load_file("fileOK.xml");
$result = [];
$result['names'] = (string)$xml->Name;
$result['titles'] = (string)$xml->Title;
foreach ($xml->Level as $value)
{
$child = [];
$item = [];
$item['name'] = (string)$value->Name;
$item['title'] = (string)$value->Title;
$item['className'] = (string)$value->className;
foreach ($value->Level as $level)
{
$child2 = [];
foreach ($level->Level as $level) {
$child[] = array(
'name' => (string)$level->Name,
'title' => (string)$level->Title,
'className' => (string)$level->className,
);
$item['children'] = $child2;
}
}
$item['children'] = $child;
$result['childrens'][] = $item;
}
$json_string = json_encode($result);
print_r($json_string);
I'm just transforming a part of the graph but I don't understand how to do more.
Thanks for the help.