一尘不染

使用SimpleXML读取RSS提要

php

我正在使用PHP和simpleXML来阅读以下rss feed:

http://feeds.bbci.co.uk/news/england/rss.xml

我可以这样获得大多数信息:

$rss = simplexml_load_file('http://feeds.bbci.co.uk/news/england/rss.xml');

echo '<h1>'. $rss->channel->title . '</h1>';

foreach ($rss->channel->item as $item) {
   echo '<h2><a href="'. $item->link .'">' . $item->title . "</a></h2>";
   echo "<p>" . $item->pubDate . "</p>";
   echo "<p>" . $item->description . "</p>";
}

但是我将如何输出以下标记中的缩略图:

<media:thumbnail width="66" height="49" url="http://news.bbcimg.co.uk/media/images/51078000/jpg/_51078953_226alanpotbury.jpg"/>

阅读 238

收藏
2020-05-29

共1个答案

一尘不染

SimpleXML在处理名称空间方面非常糟糕。您有两种选择:最简单的技巧是将提要的内容简单地读入字符串并替换名称空间。

$feed = file_get_contents('http://feeds.bbci.co.uk/news/england/rss.xml');
$feed = str_replace('<media:', '<', $feed);

$rss = simplexml_load_string($feed);
...

现在,您可以thumbnail直接访问元素。

更为优雅(不是真的)的方法是找出名称空间使用的URI。如果您查看http://feeds.bbci.co.uk/news/england/rss.xml的源代码,则会看到它指向http://search.yahoo.com/mrss/

现在,您可以在children()SimpleXMLElement 的方法中使用此URI 来获取media:thumbnail元素的内容;

$rss = simplexml_load_file('http://feeds.bbci.co.uk/news/england/rss.xml');

foreach ($rss->channel->item as $item) {
    $media = $item->children('http://search.yahoo.com/mrss/');
    ...
}
2020-05-29