0

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.

Pick
  • 55
  • 4
  • Does this answer your question? [PHP convert XML to JSON](https://stackoverflow.com/questions/8830599/php-convert-xml-to-json) – Justinas Apr 19 '21 at 07:41
  • XML and JSON does not have recursion, but your PHP _should_ use recursive function to traverse all nodes – Justinas Apr 19 '21 at 07:41

0 Answers0