Previous Entry Share Next Entry
PHP: Create RSS with DOMDocument
Hardware
sanmai
Дальше только для программистов.

В сети сходу находится только один пример создания 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();
Tags:

  • 1
(Deleted comment)
Низкоуровневые?.. Я вас не понимаю.

(Deleted comment)
Это ж PHP а не Ruby. Скажите спасибо что теги вручную писать не надо.
Например, в Java создание XML еще менее лаконично:
http://www.vogella.de/articles/RSSFeed/article.html#write

Сорри, за некропостинг - но насчет Java - это не совсем так.

Я с конкретно 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 биндингом еще медленнее]

  • 1
?

Log in

No account? Create an account