I'm trying to transform XML into Json via PHP and I don't know how to serialize objects. Basically, I have in input an XML file (file.xml) with a recursive structure and I would like to transpose it into Json (out.json).
xml file sample:
<Transfer>
<Name>Transfer</Name>
<Title>Transfer + Date</Title>
<Level1>
<Name>Item 1</Name>
<Title>Title 1</Title>
<className>middle-level</className>
<Level2>
<Name>Item 1.1</Name>
<Title>Title 1.1</Title>
<className>product-dept</className>
</Level2>
<Level2>
<Name>Item 1.2</Name>
<Title>Title 1.2</Title>
<className>product-dept</className>
<Level3>
<Name>Item 1.2.1</Name>
<Title>Title 1.2.1</Title>
<className>pipeline1</className>
</Level3>
<Level3>
<Name>Item 1.2.2</Name>
<Title>Title 1.2.2</Title>
<className>pipeline1</className>
</Level3>
</Level2>
</Level1>
<Level1>
<Name>Item 2</Name>
<Title>Title 2</Title>
<className>middle-level</className>
</Level1>
</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' },
{ 'name': 'Item 1.2.2', 'title': 'Title 1.2.2', 'className': 'pipeline1' },
]
}
]
},
{ 'name': 'Item 2', 'title': 'Title 2', 'className': 'middle-level'}
]
}
All this with php code :
$xml = simplexml_load_file("file.xml");
$result = [];
foreach ($xml->Level1 as $value)
{
$child = [];
$child['Name'] = (string)$value->Name;
$child['Title'] = (string)$value->Title;
$child['className'] = (string)$value->className;
foreach ($xml->Level2 as $level2)
{
$child = [];
$child['Level2'] = (string)$value->Level2->Name;
}
$result[] = $child;
}
$json_string = json_encode($result);
print_r($json_string);
Currently, I'm just transforming a part of the graph but I don't understand how to do more. I think that what I want to do is not too complex but I am blocked.
Thanks for the help.