Генерация XML вручную

Задача
Необходимо сгенерировать XML-документ. Например, требуется предоставить XML-версию данных для анализа другой программе.

Решение
Надо в цикле пройти по всем данным и вывести их, заключив в соответствующие теги XML:

header('Content-Type: text/xml');
print '' . "\n";
print "\n";
$shows = array(array('name' => 'Simpsons',
'channel' => 'FOX','start' => '8:00 PM',
'duration' => '30'),
array('name' => 'Law & Order',
'channel' => 'NBC',
'start' => '8:00 PM',
'duration' => '60'));
foreach ($shows as $show) {
print " \n";
foreach($show as $tag => $data) {
print " <$tag>" . htmlspecialchars($data) . "\n";
}
print "
\n";
}
print "
\n";

Обсуждение
Вывод XML вручную требует множества вложенных циклов foreach, поскольку выполняются итерации по массивам. Кроме того, здесь есть несколько хитрых нюансов. Во-первых, необходимо вызвать функцию header(), указать корректный заголовок Content-Type для нашего документа. Наша программа отправляет данные в формате XML, а не в HTML, поэтому заголовок должен указывать тип содержимого как text/xml.

Далее, в зависимости от значения параметра настройки short_open_tag, попытка напечатать объявление XML может непроизвольно включить обработку PHP.


Символы совпадают с краткой формой открывающего тега PHP-кода. Для вывода объявления в броузере необходимо либо запретить в конфигурации краткую форму тега, либо выводить эти строки из PHP. В нашем «Решении» мы выбрали последний из этих вариантов.

И наконец, сами элементы должны быть превращены в escape-последовательности. Например, символ & при показе строки Law & Order должен быть выдан в виде &. Данные преобразуются в escape-последовательности посредством функции htmlspecialchars().

Результат работы примера, приведенного в разделе «Решение», выглядит так:




Simpsons
FOX
8:00 PM
30


Law & OrderNBC
8:00 PM
60



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Анализ XML с помощью DOM
Анализ XML с помощью SAX
Генерация XML с применением DOM
Обмен данными с помощью WDDX
Посылка SOAP-запросов

Вернуться в раздел: PHP / 12. XML