使用php从RSS显示标题和图像

时间:2014-01-23 21:07:54

标签: php xml xslt simplexml

我正在尝试创建一个页面,该页面将显示RSS故事的标题以及图像。每个故事都有一个标题。大多数都有图像,但如果图像的高度和宽度设置为“100”,我只需要显示图像。到目前为止,我没有成功过滤属性。我对XML非常陌生,对PHP缺乏经验,但到目前为止我还有:

    <? 
    $xml = simplexml_load_file("./_resources/xml/news.rss");
    foreach ($xml->channel->item as $key => $value) {
        echo $value->title . "<br />\n";
        $value->registerXPathNamespace('media','http://search.yahoo.com/mrss/');
        //$result = $value->xpath('media:thumbnail[@height = "100"]');
        $result = $value->xpath('media:thumbnail/@url');
        echo '<img src="http:' . $result . '">' . "<br />\n";
        }
     ?>

RSS的结构如下:

<channel>
     <title>Title Here</title>
     <description>Here's the description</description>
     <content:encode>Here's some content for you</content:encode>
     <media:thumbnail url="//www.website.com/images/img1.jpg" width="100" height="100" />
     <media:thumbnail url="//www.website.com/images/img2.jpg" width="150" height="150" />

正如你所看到的,我尝试寻找身高=“100”的属性,但没有运气。

如果不存在100x100图像,我还需要确保不尝试显示图像,使用simplexml制作一个图像,使用XML / XSL制作一个图像任何提示?

编辑: 我想我弄清楚了。它起作用,至少。这是我做的:

<? 
    $xml = simplexml_load_file("./_resources/xml/news.rss");
    foreach ($xml->channel->item as $key => $value) {
        echo $value->title . "<br />\n";
        $value->registerXPathNamespace('media','http://search.yahoo.com/mrss/');
        $result = $value->xpath('media:thumbnail[@height = "100"]/@url');
        if ($result != null){
            echo '<img src="http:' . $result[0] . '">' . "<br />\n";
            } else {
                echo '<img src="./images/noimage.jpg" height="100" width="100">' . "<br />\n";
            }
        }
    ?>

所以,它工作......我只是不确定它是否被认为是“好代码”。另外,我应该这样做2种方法:使用simplexml,然后使用XML / XSL。不知道如何使用XML / XSL路由,所以我仍然可以在那里使用手。谢谢!

1 个答案:

答案 0 :(得分:1)

看起来你的rss xml有语法错误,url属性没有关闭:

<media:thumbnail url="//www.website.com/images/img1.jpg width="100" height="100" />