php simpleXml генерирует неверный XML - PullRequest
0 голосов
/ 04 декабря 2018

Я попытался кое-что выяснить, что не так с моим кодом, но я не вижу проблемы.

Просто у меня есть структурированный ассоциативный массив, подобный этому:

    $data = array(
        'field1' => array(
            'filed11' => '',
            'field12' => array(
                'field121' => 'blub'
            )
        ), 
        'field2' => 'foo',
        'field3' => array(
            'field31' => 'val',
            'field32' => 'other value'
        )
    );

iЯ написал небольшой рекурсивный метод для генерации XML из массива:

protected function buildXmlFromArray(SimpleXMLElement $xml, $data)
{
    if(is_array($data)) {
        foreach($data as $key => $value) {
            if(is_array($value)) {                    
                $child = $xml->addChild($key);
                $this->buildXmlFromArray($child, $value);                    
            } else {
                $xml->addChild($key, $value);
            }
        }
    }
}

Итак, я генерирую корневой узел и помещаю его в метод:

    $xml = new SimpleXMLElement('<root />');        
    $res = $this->buildXmlFromArray($xml, $data);

    print_r($xml->asXML());
    exit;

Я ожидал бы, чтоя получаю что-то вроде этого:

<?xml version="1.0"?>
<root>
    <field1>
        <filed11 />
        <field12>
            <field121>blub</field121>
        </field12>
    </field1>
    <field2>foo</field2>
    <field3>
        <field31>val</field31>
        <field32>other value</field32>
    </field3>
</root>

но я получаю недопустимый XML:

<?xml version="1.0"?>
<root>
    <field1>
        <filed11>
            <field12>
                <field121>blub</field121>
            </field12>
        </field1>
        <field2>foo</field2>
        <field3>
            <field31>val</field31>
            <field32>other value</field32>
        </field3>
    </root>

, поэтому field11 не закрывается Что с этим не так?

Моя версия PHP7.2.10-0ubuntu0.18.04.1

...