Генерация XML в PHP
July 14, 2008 in PHPРассматривая примеры генерации XML-выгрузок от различных украинских маркетов (не буду никого смущать прямыми ссылками), удивлен тем, что многие используют обыкновенную шаблонную методику, вроде:
```phpЯ уже молчу о том, что в данном конкретном примере присутствуют short_open_tags.
Но почему не использовать встроенные в PHP 5 DOM-классы? Это дает нам такие преимущества (навскидку):
- гарантированная валидность результата (и соответствие DTD, если его указать)
- автоматическое форматирование (
$dom -> formatOutput = true;
) - автоматическое преобразование кодировки – достаточно указать нужную в заголовке файла.
Посмотрим на генерацию того же фрагмента XML средствами DomDocument:
```php 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:
$dom = DOMDocument::loadXML('
– создает документ вместе с корневым элементом'); $dom -> documentElement
DOMElement::setAttribute('name', $value)
– устанавливает атрибутDOMElement::appendChild( $dom->createElement('name', [$text]) )
– создает в документе элемент
и добавляет в другой элементtext $dom->saveXML()
– отдает всю эту красоту в виде строки
Все, дальше курим маны и больше никогда, никогда, никогда не выводим XML шаблонами.
Понравился пост? Купи мне кофе