Я попытался кое-что выяснить, что не так с моим кодом, но я не вижу проблемы.
Просто у меня есть структурированный ассоциативный массив, подобный этому:
$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