私のアプリケーションの構造では、各コンポーネントが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を使用する場合があります。それはより柔軟性があり、パフォーマンスも優れているように見えました(少なくとも私が作成した大まかなテストでは)。