Простой генератор XML на PHP


Недавно назрела необходимость сгенерировать небольшой 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 отсутствует, в архиве есть упрощённая версия

Download

(посмотреть ещё немножко всякой интересной фигни)

iStem.ru © 2011