我找到了一个关于如何完成大部分工作的精彩教程:
https://www.developphp.com/video/PHP/simpleXML-Tutorial-Learn-to-Parse-XML-Files-and-RSS-Feeds
但我无法理解如何提取媒体:来自Feed的内容图片.我已经阅读了尽可能多的信息,但我仍然卡住了.
ie:如何获取媒体:使用SimpleXML的内容 建议使用:
foreach ($xml->channel->item as $news){
    $ns_media = $news->children('http://search.yahoo.com/mrss/');
    echo $ns_media->content; // displays "<media:content>"}
但我无法让它发挥作用.
这是我正在尝试解析的脚本和提要:
<?php
$html = "";
$url = "http://rssfeeds.webmd.com/rss/rss.aspx?RSSSource=RSS_PUBLIC";
$xml = simplexml_load_file($url);
for($i = 0; $i < 10; $i++){
    $title = $xml->channel->item[$i]->title;
    $link = $xml->channel->item[$i]->link;
    $description = $xml->channel->item[$i]->description;
    $pubDate = $xml->channel->item[$i]->pubDate;
    $html .= "<a href='$link'><h3>$title</h3></a>";
    $html .= "$description";
    $html .= "<br />$pubDate<hr />";
}
echo $html;
?>
我不知道将此代码添加到脚本中以使其工作.老实说,我浏览了几个小时,但找不到可以解析媒体的工作脚本:内容.
有人可以帮忙吗?
========================
更新:
Thanx to fusion3k,我得到了最终的代码:
<?php
$html = "";
$url = "http://rssfeeds.webmd.com/rss/rss.aspx?RSSSource=RSS_PUBLIC";
$xml = simplexml_load_file($url);
for($i = 0; $i < 5; $i++){
    $image = $xml->channel->item[$i]->children('media', True)->content->attributes();
    $title = $xml->channel->item[$i]->title;
    $link = $xml->channel->item[$i]->link;
    $description = $xml->channel->item[$i]->description;
    $pubDate = $xml->channel->item[$i]->pubDate;
    $html .= "<img src='$image' alt='$title'>";
    $html .= "<a href='$link'><h3>$title</h3></a>";
    $html .= "$description";
    $html .= "<br />$pubDate<hr />";
}
echo $html;
?>
基本上我只需要这个简单的线:
$image = $xml->channel->item[$i]->children('media', True)->content->attributes();
不可否认,非技术人员在阅读了数十篇帖子和文章后,在网上找到这些信息是如此困难.好吧,希望这对我这样的其他人有用:)
要获取'url'属性,请使用以下->attribute()语法:
$ns_media = $news->children('http://search.yahoo.com/mrss/');
/* Echoes 'url' attribute: */
echo $ns_media->content->attributes()['url'];
// in php < 5.5: $attr = $ns_media->content->attributes(); echo $attr['url'];
/* Catches 'url' attribute: */
$url = $ns_media->content->attributes()['url']->__toString();
// in php < 5.5: $attr = $ns_media->content->attributes(); $url = $attr['url']->__toString();
该->children()参数是不是你的XML的URL,这是一个命名空间 URI.
XML名称空间用于在XML文档中提供唯一命名的元素和属性:
Run Code Online (Sandbox Code Playgroud)<xxx> Standard XML tag <yyy:zzz> Namespaced tag ??? ??? ? ????? Element Name ????????? Element Prefix (Namespace Identifier)
因此,在您的情况下,<media:content>是名称空间"媒体"的"内容"元素.Namespaced元素必须具有关联的名称空间URI,作为父节点的属性或 - 最常见的 - 根元素的属性:此属性具有表单xmlns:yyy="NamespaceURI"(在您的情况下xmlns:media="http://search.yahoo.com/mrss/"作为根节点的属性<rss>).
最终,上述$news->children( 'http://search.yahoo.com/mrss/' )意思是"使用http://search.yahoo.com/mrss/作为命名空间URI 检索所有子元素; 备选-最可理解-语法是:$news->children( 'media', True )(True"视为前缀"装置).
回到示例中的代码,检索具有前缀的所有第一个项目的子代的通用语法media是:
$xml = simplexml_load_file( 'http://rssfeeds.webmd.com/rss/rss.aspx?RSSSource=RSS_PUBLIC' );
$xml->channel->item[0]->children( 'http://search.yahoo.com/mrss/' );
或(相同的结果):
$xml = simplexml_load_file( 'http://rssfeeds.webmd.com/rss/rss.aspx?RSSSource=RSS_PUBLIC' );
$xml->channel->item[0]->children( 'media', True );
如果要显示<media:content url>页面中每个元素的缩略图,请以这种方式修改原始代码:
(...)
$pubDate = $xml->channel->item[$i]->pubDate;
$image   = $xml->channel->item[$i]->children( 'media', True )->content->attributes()['url'];
// in php < 5.5:
// $attr  = $xml->channel->item[$i]->children( 'media', True )->content->attributes();
// $image = $attr['url'];
$html   .= "<a href='$link'><h3>$title</h3></a>";
$html   .= "<img src='$image' alt='$title'>";
(...)
小智 5
像我这样的新手的简单示例:
$url = "https://www.youtube.com/feeds/videos.xml?channel_id=UCwNPPl_oX8oUtKVMLxL13jg";
$rss = simplexml_load_file($url);
foreach($rss->entry as $item) {
  $time = $item->published;
  $time = date('Y-m-d \ H:i', strtotime($time));
  $media_group = $item->children( 'media', true );
  $title = $media_group->group->title;
  $description = $media_group->group->description;
  $views = $media_group->group->community->statistics->attributes()['views'];
}
echo $time . ' :: ' . $title . '<br>' . $description . '<br>' . $views . '<br>';