PHP: преобразовать массив в файл XML
Часто бывает нужно сохранить данные формата XML в базе данных или в файле для дальнейшего использования.
Так как на PHP в большинстве случаев достаточно применения массивов для хранения структур данных любой сложности, нам поможет расширение SimpleXML и небольшая рекурсивная функция-"обёртка" над ним.
Код проверялся в актуальной сборке XAMPP с PHP 7.4.X.
<?php function arrayToXml ($array, $rootElement = null, $xml = null) { $_xml = $xml; if ($_xml === null) { $_xml = new SimpleXMLElement ($rootElement !== null ? $rootElement : '<root/>'); } foreach ($array as $k => $v) { if (is_array($v)) { arrayToXml ($v, $k, $_xml->addChild($k)); } else { $_xml->addChild($k, $v); } } return $_xml->asXML(); } $arr = [ 'name' => 'Попандопулос В.А.', 'subject' => 'RU', 'contacts' => [ 'city' => 'Нерезиновка', 'email' => [ 'mail_1' => 'admin@gmail.com', 'mail_2' => 'gates@microsoft.com' ], 'state' => 'ЦФО' ] ]; $xml = arrayToXml($arr); echo '<textarea>',$xml,'</textarea>'; //Одной строкой, без форматирования $doc = new DOMDocument(); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; $doc->loadXML($xml); echo '<br><textarea>',$doc->saveXML(),'</textarea>'; //С форматированием ?>
Функция arrayToXml
выдаст "неформатированный" XML одной строкой. Форматировать данные позволяет другое расширение, DOMDocument, как это сделать, также показано в коде.
Не все наименования элементов разрешены, например, <1>
вместо <mail_1>
вызовет ошибку.
Итоговая получившаяся разметка XML такова:
<?xml version="1.0"?> <root> <name>Попандопулос В.А.</name> <subject>RU</subject> <contacts> <city>Нерезиновка</city> <email> <mail_1>admin@gmail.com</mail_1> <mail_2>gates@microsoft.com</mail_2> </email> <state>ЦФО</state> </contacts> </root>
22.08.2020, 00:27 [965 просмотров]