У вас есть два варианта. Во-первых, вы можете использовать шаблон Smarty для создания вашего XML, что-то вроде этого:
<sites>
{foreach from=$randomSites value=site}
<site>
<url>{$site|objurl:'siteDetails'|escape:'url'}</url>
<title>{$site.siteTitle|escape}</title>
<image-url>{$site.imageSrc|escape:'url'}</image-url>
</site>
{/foreach}
</sites>
Во-вторых, как вы предлагаете, вы можете построить свое дерево XML в библиотеке, такой как SimpleXML или DOM, в памяти, а затем сериализовать его на диск. Преимущество состоит в том, что библиотека предотвратит любые ошибки разметки XML; недостаток в том, что для не-XML-специалиста будет сложнее представить, как будет выглядеть вывод на основе вызовов библиотеки.