Я почти уверен, что есть библиотеки, облегчающие создание RSS-каналов, но если вы хотите сделать это с правильным расширением XML, вот пример с DOM:
Сначала мы определим пространство имен. Это только для лени.
$namespaces = array(
'xmlns' => 'http://purl.org/rss/1.0/',
'xmlns:rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
'xmlns:slash' => 'http://purl.org/rss/1.0/modules/slash/',
'xmlns:taxo' => 'http://purl.org/rss/1.0/modules/taxonomy/',
'xmlns:dc' => 'http://purl.org/dc/elements/1.1/',
'xmlns:syn' => 'http://purl.org/rss/1.0/modules/syndication/',
'xmlns:admin' => 'http://webns.net/mvcb/',
'xmlns:feedburner' => 'http://rssnamespace.org/feedburner/ext/1.0'
);
Далее вам нужно создать и настроить новый документ. Мы хотим красиво отформатированный UTF8 XML:
// prepare DOMDocument
$dom = new DOMDocument('1.0', 'utf-8');
$dom->formatOutput = TRUE;
$dom->preserveWhitespace = FALSE;
Далее вам нужно создать корневой элемент и добавить в него все пространства имен. Поскольку у нас есть пространства имен в массиве, мы можем просто перебрать массив и добавить их:
// create root node
$root = $dom->createElement('rdf:RDF');
foreach($namespaces as $ns => $uri) {
$root->setAttributeNS('http://www.w3.org/2000/xmlns/', $ns, $uri);
}
$dom->appendChild($root);
Остальное - создание и добавление узлов. Это всегда одно и то же. Создайте узел, настройте его, добавьте к родительскому элементу. Код ниже эквивалентен вашим сцепленным строкам:
// create and append Channel
$channel = $dom->createElement('channel');
$channel->setAttribute('rdf:about', 'foo');
$root->appendChild($channel);
// create and append Title and Description
$channel->appendChild($dom->createElement('title', 'Example Feed'));
$channel->appendChild($dom->createElement('description'));
// special chars like & are only automatically encoded when added as DOMText
$link = $dom->createElement('link');
$link->appendChild($dom->createTextNode('http://example.com?foo=1&bar=2'));
$channel->appendChild($link);
// we added namespaces to root, so we can simply add ns'ed elements with
$channel->appendChild($dom->createElement('dc:language', 'en'));
$channel->appendChild($dom->createElement('dc:rights', 'public domain'));
И это все. Теперь для вывода, вы делаете:
// output cleanly formatted XML
echo $dom->saveXML();