Benim uygulama yapılandırılmıştır yolu, her bir bileşen XML olarak çıktı üretir ve bir XmlWriter nesne döndürür. Sayfa son çıkış render önce, tüm XML birleştirmek ve bu nesne üzerinde bir XSL dönüşümü gerçekleştirmek. Aşağıda, uygulama yapısının basitleştirilmiş bir kod örneği.
Böyle XmlWriter nesneleri birleştirmek için mantıklı mı? Benim uygulama yapısı için daha iyi bir yolu var mı? Optimal çözüm ben her bir bileşen için parametre olarak tek bir XmlWriter örneği geçmek yoktu biri olacaktır.
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);
Update:
I may abandon XmlWriter altogether and use DomDocument instead. It is more flexible and it also seemed to perform better (at least on the crude tests I created).