В сети сходу находится только один пример создания RSS через DOMDocument, да и тот не слишком меня впечатлил. Потому я просто оставлю это здесь:
<?php $xml = new DOMDocument("1.0", "utf-8"); $xml->formatOutput = true; $rss = $xml->createElement("rss"); $rss->setAttribute("version", "2.0"); $rss->setAttribute("xmlns:atom", "http://www.w3.org/2005/Atom"); $xml->appendChild($rss); $channel = $xml->createElement("channel"); $rss->appendChild($channel); $atomLink = $xml->createElement("atom:link"); $atomLink->setAttribute("href", 'http://feeds.feedburner.com/example'); $atomLink->setAttribute("rel", 'self'); $atomLink->setAttribute("type", 'application/rss+xml'); $channel->appendChild($atomLink); $channel->appendChild($xml->createElement("title", 'Название блога')); $channel->appendChild($xml->createElement("link", 'http://www.example.com/')); $channel->appendChild($xml->createElement("description", 'Самый интересный блог на свете!')); $channel->appendChild($xml->createElement("language", "ru-ru")); $channel->appendChild($xml->createElement("lastBuildDate", date('r'))); $channel->appendChild($xml->createElement("ttl", "60")); $blog = new myBlog(); $channel->appendChild($xml->createElement("pubDate", date('r', $blog->getLastUpdateDate()))); $blog->setLimit(10); while ($record = $blog->getEntry()) { $item = $xml->createElement('item'); $entry->appendChild($xml->createElement('title', $record->getTitle())); $entry->appendChild($xml->createElement('link', $record->getURL())); $entry->appendChild($xml->createElement('guid', $record->getURL())); $entry->appendChild($xml->createElement('pubDate', date('r', $record->getPubTime()))); $entry->appendChild($xml->createElement('description', $record->getContent())); $channel->appendChild($entry); } header('Content-Type: application/rss+xml; charset=utf-8'); echo $xml->saveXML();
Например, в Java создание XML еще менее лаконично:
http://www.vogella.de/articles/RSSFeed/article.html#write
Я с конкретно RSS не работал. Но в случае с парсингом XML в Яве все может быть намного проще.
Есть класс XMLBean, для которого аннотациями или другим способом задан маппинг каждого поля на XML элемент. И в конечном итоге, код выглядит так:
xmlBean.setProperty1(...);
xmlBean.setProperty2(...);
...
xmlBean.setPropertyN(...);
someXmlFactory.serialize(xmlBean, ...);
Это общий пример. Т.к. фреймворков, которые это позволяют делать - довольно много и API у них разный.
Т.е. в результате, код компактный. Единственное, что зависимости разрастаются.
Пример для JAXB - http://blog.adamsbros.org/2010/02/07/jaxb-example-code/
Пример для XStream - http://xstream.codehaus.org/converter-tutorial.html
---
В Java можно так же работать с DOM документами напрямую.
Тогда код будет похожим на Ваш пример на PHP
А на приведенной Вами ссылке - автор использует StAX парсер. Вероятно, из соображений производительности.
[DOM медленнее; описанный мной подход с XML биндингом еще медленнее]