Генерация XML в PHP

July 14, 2008 PHP XML

Рассматривая примеры генерации XML-выгрузок от различных украинских маркетов (не буду никого смущать прямыми ссылками), удивлен тем, что многие используют обыкновенную шаблонную методику, вроде:

<item id=<?=$o->productID?> top=”0”>
    <name><?=to_xml($o->name)?></name>
    <price><?=$o->price?></price>
    <categoryId><?=$o->categoryID?></categoryId>
    <description><?=to_xml($o->description)?></description>
    <url><?=to_xml(”http://myshop.kiev.ua/index.php?productID=.$o->productID)?></url>
    <image><?=to_xml(”http://myshop.kiev.ua/pictures/.$o->image)?></image>
</item>

Я уже молчу о том, что в данном конкретном примере присутствуют short_open_tags.
Но почему не использовать встроенные в PHP 5 DOM-классы? Это дает нам такие преимущества (навскидку):

Посмотрим на генерацию того же фрагмента XML средствами DomDocument:

<?php
$item = $dom_items -> appendChild( $dom->createElement('item'));
$item -> setAttribute('id', $o->productID);
$item -> setAttribute('top', '0');

$item -> appendChild( $dom->createElement('price', $record['price']));
$item -> appendChild( $dom->createElement('categoryId', $o->categoryID));
$item -> appendChild( $dom->createElement('name',htmlspecialchars($o->name)));
$item -> appendChild( $dom->createElement('description',
    htmlspecialchars($o->description)));
$item -> appendChild( $dom->createElement('url',
    htmlspecialchars("http://myshop.kiev.ua/index.php?productID=".$o->productID)));
$item -> appendChild( $dom->createElement('image', 
    htmlspecialchars("http://myshop.kiev.ua/pictures/".$o->image)));

Разве этот код не понятнее и структурнее, чем tag soup из первого примера? Да, писать придется немного больше, зато ты никаким образом не отдашь в XML неэскейпленные символы, незакрытые теги и прочий мусор.

Немного теории

Для начала все, что надо знать – это пять функций. Почитай их описание в PHP Manual:

Все, дальше курим маны и больше никогда, никогда, никогда не выводим XML шаблонами.

Buy Me a Coffee at ko-fi.com