При структурировании моего приложения каждый компонент генерирует вывод в виде XML и возвращает объект XmlWriter. Перед рендерингом окончательного вывода на страницу я объединяю весь XML и выполняю XSL-преобразование для этого объекта. Ниже приведен упрощенный пример кода структуры приложения.
Имеет ли смысл объединять объекты XmlWriter следующим образом? Есть ли лучший способ структурировать мое приложение? Оптимальным решением было бы то, где мне не нужно было передавать один экземпляр XmlWriter в качестве параметра каждому компоненту.
function page1Xml() {
$content = new XmlWriter();
$content->openMemory();
$content->startElement('content');
$content->text('Sample content');
$content->endElement();
return $content;
}
function generateSiteMap() {
$sitemap = new XmlWriter();
$sitemap->openMemory();
$sitemap->startElement('sitemap');
$sitemap->startElement('page');
$sitemap->writeAttribute('href', 'page1.php');
$sitemap->text('Page 1');
$sitemap->endElement();
$sitemap->endElement();
return $sitemap;
}
function output($content)
{
$doc = new XmlWriter();
$doc->openMemory();
$doc->writePi('xml-stylesheet', 'type="text/xsl" href="template.xsl"');
$doc->startElement('document');
$doc->writeRaw( generateSiteMap()->outputMemory() );
$doc->writeRaw( $content->outputMemory() );
$doc->endElement();
$doc->endDocument();
$output = xslTransform($doc);
return $output;
}
$content = page1Xml();
echo output($content);
Обновление:
Я могу вообще отказаться от XmlWriter и использовать DomDocument. Он более гибкий, и, похоже, он работает лучше (по крайней мере, на грубых тестах, которые я создал).