使用simpleXML解析打印缩略图 - 如何返回所有?

时间:2015-04-14 13:03:09

标签: php xml rss simplexml

我在这里已经找到了这个问题的答案,但我似乎无法找到与这个特定问题相关的任何内容。

我目前正在使用simpleXML来解析RSS提要,以便通过遍历节点来解析缩略图,以解析" media:thumbnail"。我已设法执行此操作并返回所有缩略图URL,因此我知道我正在获取正确的内容,如下所示:

<?php 

$url = "http://feeds.bbci.co.uk/news/rss.xml?edition=uk";
$xml = simplexml_load_file($url);

foreach($xml->channel->item as $item) {
$media = $item->children('media', 'http://search.yahoo.com/mrss/');
foreach($media->thumbnail as $thumb) {
   echo $thumb->attributes()->url;
}
}

?>

这回复了所有图片网址。但是当我将它存储到变量并尝试稍后以img src回显时,它只返回一个图像,而不是全部:

<?php 

$url = "http://feeds.bbci.co.uk/news/rss.xml?edition=uk";
$xml = simplexml_load_file($url);

foreach($xml->channel->item as $item) {
$media = $item->children('media', 'http://search.yahoo.com/mrss/');
foreach($media->thumbnail as $thumb) {
   $image = $thumb->attributes()->url;
}
}
?>

<div><img src = <?php echo $image; ?> /></div>

如何回显单个图像中的所有网址?谢谢你的期待。

2 个答案:

答案 0 :(得分:2)

由于您正在获得并期待多个图像网址,因此也可以将它们存储在数组中:

$images_container = array();
foreach($xml->channel->item as $item) {
    $media = $item->children('media', 'http://search.yahoo.com/mrss/');
    foreach($media->thumbnail as $thumb) {
       $image = $thumb->attributes()->url;
       $images_container[] = (string) $image;
    }
}

echo '<pre>', print_r($images_container, 1), '<pre>';

Sample Output

现在当然,如果你想处理那些字符串图像网址数组,那么只需使用和处理容器:

<?php foreach($images_container as $url): ?>
    <div><img src="<?php echo $url; ?>" alt="" /></div>
<?php endforeach; ?>

Pictures

答案 1 :(得分:1)

尝试xpath

$url = "http://feeds.bbci.co.uk/news/rss.xml?edition=uk";

$xml = simplexml_load_file($url);

$xml->registerXPathNamespace( 'media', 'http://search.yahoo.com/mrss/' );
// get only thumbnails of specified width
$xpath = $xml->xpath( '//media:thumbnail[@url and @width=144]' );

/**
 * The above xpath will get only thumbnails of width 144
 */

foreach( $xpath as $node ) {
    echo '<div><img src="' . $node['url'] . '" /></div>';
}

希望有所帮助。