使用SimpleXML读取RSS提要

我正在使用PHP和simpleXML阅读以下rss提要:

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

我可以获得我想要的大部分信息,如下所示:

$rss=simplexml\u load\u文件('http://feeds.bbci.co.uk/news/england/rss.xml');
回声'<h1>'$rss->渠道->头衔。”&lt/h1>';
foreach($rss->频道->项作为$item){
echo“<h2><a href=“”.$item->link.”“>”.$item->title.</a></h2>”;
echo“<p>”$item->publidate.</p>”;
echo“<p>”$item->description.</p>”;
} 

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

<媒体:缩略图宽度=“66”高度=“49”url=”http://news.bbcimg.co.uk/media/images/51078000/jpg/_51078953_226alanpotbury.jpg“/>

如您所知,SimpleXML允许您使用对象属性操作符选择节点的子节点或使用数组访问的节点属性['name']。这很好,但是只有当您选择的属于同一名称空间时,该操作才起作用

如果要从一个命名空间“跳”到另一个命名空间,可以使用children()attributes()方法。在您的例子中,这变得有点棘手,因为您有<项目/&gt在全局名称空间中,您要查找的节点位于“媒体”名称空间*中,然后属性再次位于全局名称空间中(它们没有前缀)。因此,使用普通对象/数组表示法,您必须两次“跳跃”:

foreach($rss->频道->项目作为$item)
{
//我们将属性加载到$thumbAttr中
//您可以使用名称空间前缀
$thumbAttr=$item->子项('media',true)->缩略图->属性();
//或者最好是名称空间名称,请阅读下面的注释以获取解释
$thumbAttr=$item->子项('http://search.yahoo.com/mrss/“)->缩略图->属性();
echo$thumbAttr['url'];
}

*注

我将名称空间称为“媒体”名称空间,但这并不正确。名称空间名称为http://search.yahoo.com/mrss/,而“media”只是一个前缀,如果您愿意的话,是某种别名。重要的是要记住http://search.yahoo.com/mrss/是命名空间的真实名称。在某个时候,RSS提供商可能会决定将前缀更改为,比如“yahoo”,如果脚本引用了“media”前缀,那么脚本将停止工作。但是,如果使用名称空间名称,则无论前缀是什么,它都将继续工作

发表评论