我的应用程序的结构方式是,每个组件都将输出生成为 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。它更灵活,而且似乎表现更好(至少在我创建的粗略测试中)。