xml — PHP DomDocument не форматируется правильно

Я пытаюсь заставить мой PHP обновить существующий XML-файл, но он работает полностью так, как и полагается. В PHP-коде предполагается добавить дочерний узел с элементами внутри корневого элемента xml-файла. Но как-то форматирование работает неправильно, и все недавно добавленные xml-элементы помещаются в одну строку.
Если я удаляю параметр lastChild из php, он помещает вновь добавленные xml-элементы вне корня, но форматирует xml правильно.

Помогите?

Пример существующего XML-файла:

        <?xml version="1.0" encoding="UTF-8"?>
<root>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
</root>

Пример PHP-кода:

$file = 'DEFAULT_DATE_CONVERSION4.xml';
$xml = new DOMDocument();
$xml->load($file);
$xml2 = $xml->documentElement->getElementsByTagName('datetimes');

$app = $xml->createElement('testing');
$testtext = "test";
$app->appendChild($xml->createElement('test', $testtext));
$app->appendChild($xml->createElement('test1', $testtext));
$app->appendChild($xml->createElement('test2', $testtext));
$app->appendChild($xml->createElement('test3', $testtext));
$xml->lastChild->appendChild($app);

$xml->formatOutput = true;
$xml->saveXML();
$xml->save("test.xml");

Результат:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing><test>test</test><test1>test</test1><test2>test</test2><test3>test</test3></testing></root>

Ожидаемый результат:

<?xml version="1.0" encoding="UTF-8"?>
<datetimes>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test1</test1>
<test2>test2</test2>
<test3>test3</test3>
</testing>
<testing>
<test>test</test>
<test1>test</test1>
<test2>test</test2>
<test3>test</test3>
</testing>
</datetimes>

1

Решение

Вы должны получить то, что после, отметив, чтобы не сохранять пробелы (preserveWhiteSpace) и затем настройте форматирование вывода (formatOutput) при загрузке документа …

$file = 'DEFAULT_DATE_CONVERSION4.xml';
$xml = new DOMDocument();
$xml->formatOutput = true;
$xml->preserveWhiteSpace = FALSE;
$xml->load($file);

$app = $xml->createElement('testing');
$testtext = "test";
$app->appendChild($xml->createElement('test', $testtext));
$app->appendChild($xml->createElement('test1', $testtext));
$app->appendChild($xml->createElement('test2', $testtext));
$app->appendChild($xml->createElement('test3', $testtext));
$xml->lastChild->appendChild($app);

$xml->save("test.xml");
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]