xml — синтаксический анализ потока Atom в переполнении стека

Я написал следующий PHP для разбора RSS и Atom. Этот подход отличается от других, которые я видел, тем, что он просто проверяет пару мест в разобранном XML для массива элементов.

function LoadItems($id, $feed)
{
/* Load items into global $rssItems array */
$rssItems = array();
try {
$rss = simplexml_load_file($feed);
} catch (Exception $e) {
echo "<div>Load failed \"" . $feed . "\"</div>\n";
return;
}
if (!($rss->channel->item))
/* This appears to be where Atom feed item lists are parsed to */
$items = $rss->item;
else
$items = $rss->channel->item;

foreach ($items as $item) {
$item = array(
"id" => $id,
"feedTitle" => $rss->channel->title,
"feedLink" => $rss->channel->link,
"itemTitle" => $item->title,
"itemPubDate" => $item->pubDate,
"itemLink" => $item->link,
"itemDesc" => RemoveLinks($item->description));
array_push($rssItems, $item);
}
/*
* Sort all items from all feeds in reverse chronological
* order
*/
usort($rssItems, 'RSS_CMP');

return $rssItems;
}

У меня вопрос такой. Я обнаружил это случайно. Я просто смотрел на вывод print_r проанализированных XML-файлов и заметил различные структуры для RSS и Atom. Это кошерное делать? Я имею в виду, собирается ли simplexml_load_file разместить эти элементы в этом месте для всех каналов атомов? Применимо ли это решение ко всем фидам с атомом, которые анализируются с помощью simplexml_load_file ()?

1

Решение

Как вы уже заметили, RSS и Atom — это два разных стандарта. Они оба используют XML, но отличаются по своей структуре.
simplexml_load_file в php довольно прост в использовании, и вы можете проверить для определенных частей канала (например, channel в атоме или RSS, начиная с feed).

Но если вы хотите сделать немного больше с данными канала, я бы порекомендовал вам использовать некоторые библиотеки, поддерживающие rss и atom, чтобы вам не приходилось возиться с различиями.

например с simplepi это довольно легко получить доступ к данным канала, и он управляет обоими стандартами (для справки см. вики)

0

Другие решения

Других решений пока нет …