Как стать автором
Обновить

Комментарии 11

4 года назад вышли из ситуации похожим образом. Массивы очень долго преобразовывались в xml при помощи стандартных средств PHP. А шаблонов было слишком много, чтобы в разумные сроки избавиться от XSLT. Тогда собрал «на коленке» либу, на основе стандартной функции json_encode, переписав её немного. С тех пор так и работает.
Давно уже делал тесты, оказалось, что гораздо быстрее работать/формировать XML через SimpleXML, и преобразовывать его в DOM уже непосредственно перед XSLT трансформацией.

А с SimpleXML довольно удобно работать, не хуже, чем с массивами, плюс, есть XPath для поиска значений.

<?php
$data = new SimpleXMLElement('<data/>');
//...
$doc = new DomDocument();
$doc->loadXml($data->asXml());
$xslt = new DomDocument();
$xslt->load('template.xslt');
$proc = new XsltProcessor();
$proc->registerPHPFunctions();
$proc->importStylesheet($xslt);
$doc = $proc->transformToUri($doc, 'php://output');

Все верно, только код на чистом PHP, использующий SimpleXML или DOMDocument, примерно в 20 раз медленнее, чем dom_varimport (по моим оценкам). Во многих случаях это не держит, но мне как-то раз жалко стало 40 мс, и вот, родилось данное расширение…
Про сравнение DOMDocument с dom_varimport поверю, но не с SimpleXML, он очень быстр.
Избавиться от многословного синтаксиса можно с помощью небольшого дополнительного шаблона: «Добавляем сахар в XSLT».
А почему не распространять через PECL, к чему эти пляски с make?
В PECL добавить — процесс небыстрый. Я его запустил одновременно с написанием этого поста.
Большое спасибо и прошу простить на негативный комментарий.
Странная область применения, собирать данные для выдачи в пхпшные массивы, потом из них слепить xml объект, который отдать xslt процессору. Если используется такая замечательная технология как xslt, то зачем данные собирать в массивы — можно сразу строить xml-объект нужной структуры, разница будет не заметна :)
Расширение должно быть полезное для импорта, но упоминание xslt только сбивает с толку.
А ещё лучше бы сразу из пхпшной сериализации строило xml объектины, эдакий unserialize_to_xml :)
Можно и руками формировать, но это будет хардкод и копипаст, размазанный ровным слоем по всем контроллерам проекта. Если у вас используется ORM (да или даже PDO простой, или что угодно), то результат sql-выборок естественным образом будет помещен в PHP-массивы или PHP-объекты. Зачем в каждом контроллере нужно это все итерировать и формировать XML, когда можно данную операцию сделать централизованно?
когда-то я был фаном XSLT, даже где-то были мои статьи :)
но со временем отказался от этой технологии в пользу более простых и быстрых шаблонизаторов
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории