Недавно назрела необходимость сгенерировать небольшой XML документ со своими данными из таблиц.
В интернете, к сожалению, и как обычно, ничего толкового не нашлось - вот и пришлось изобретать свой велосипед.
Для описания XML документа используется несложная структура и массив данных, описание которых можно посмотреть в файлах исходниках.
Допустим нужно сформировать следующий документ:
<?xml version="1.0" encoding="utf-8"?> <root xmlns="http://some.schemas.ru/schemas/feed/2011"> <gdate>2011-11-11T00:21:28+03:00</gdate> <offer internal-id="123"> <number int="123">123</number> <content> <title>The first news</title> <description>Asome text content at first news</description> </content> </offer> <offer internal-id="456"> <number int="456">456</number> <content> <title>Second news</title> <description>Bsome text content at second news</description> </content> </offer> </root>
Для данного XML документа создаётся вот такая структура:
(Примеры структуры и данные, также можно посмотреть в файлах исходниках)
$xml->struct = array( 'root' => array( // корневой элемент документа // назначаем атрибуты для <root> '__attributes' => array( 'xmlns' => "http://some.schemas.ru/schemas/feed/2011"), // элемент... 'gdate' => 'date', // 'date' - впоследствии заменяется на нужное значение 'offer' => array( // массив элементов <offer>...</offer><offer>...</offer> // назначаем атрибуты элементов (<offer internal-id="123">...) '__attributes' => array( 'internal-id' => 'id' ), // поле '__type' == 'repeat' указывает что данный элемент является множественным '__type' => 'repeat', // можно указать тэг <number> без атрибутов. получится <number>123</number> //'number' => 'id', 'number' => array( '__attributes' => array( 'int' => 'id', ), 'id', // значение (устанавливается по ключу из массива $xml->values ) // (значение=ключ_$values) // значение можно не указывать, тогда это будет пустой тэг <number int="123"/> ), 'content' => array( // контейнер 'title' => 'news', // тэг 'description' => 'content', // тэг ), ), ), );
В частности, мне потребовалось генерация экспортного XML формата YRL (Yandex Realty Language) для службы Яндекс.Недвижимость с данной задачей этот небольшой скриптик с успехом справился :)
Более подробно можно ознакомиться - скачав исходники.
* если DOM Document отсутствует, в архиве есть упрощённая версия
(посмотреть ещё немножко всякой интересной фигни)