php:使用simplexml和xpath解析rss feed

时间:2012-07-14 09:13:20

标签: php xpath rss simplexml feed

我试图解析链接 rss feed with images using php

我尝试解析rss feed以显示来自enclosure标记的图像。我尝试了该链接上给出的解决方案。但它不起作用。 element_attributes函数尚未定义。

所以,我尝试使用xPath获取图像。以下是我的输出(空数组):

Array()

在我的网络服务器错误日志上。

有谁可以指出我哪里出错了?谢谢。

<?php
if (function_exists("curl_init")){
    $ch=curl_init();
    curl_setopt($ch,CURLOPT_URL, 'http://menmedia.co.uk/manchestereveningnews/news/rss.xml');
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    //curl_setopt($ch,CURLOPT_HEADER,0);
$data=curl_exec($ch);


curl_close($ch);


$doc=new SimpleXmlElement($data,LIBXML_NOCDATA);

function getImage($xml){
    $imgs=$xml->xPath('rss/channel/enclosure[@attributes]');
    print_r($imgs);
    /*foreach ($imgs as $image){
        echo $image->url;
    }*/
}
if (isset($doc->channel)) getImage($doc);

} ?&GT;

3 个答案:

答案 0 :(得分:1)

$imgs=$xml->xPath('//channel/item/enclosure');
foreach($imgs as $img) {
    var_dump($img->attributes());
}

答案 1 :(得分:1)

此单个XPath表达式

/rss/channel/item/enclosure/@*

选择所有enclosure元素的所有属性,这些属性是作为顶级channel元素子元素的所有rss元素的子元素。

使用以下内容既简单又高效:

//channel/item/enclosure

然后在单独的评估中找到属性。

请记住

评估从//伪运算符开始的XPath表达式通常比使用特定路径要慢得多 - 因为这会导致非优化的XPath处理器遍历整个文档。

答案 2 :(得分:1)

我得到了它的工作。它显示所有图像。正如Dimitre建议的那样,我使用'/ rss / channel / item / enclosure'减去'@ *'。以下是我的功能:

function getImage($xml){
    $encls=$xml->xPath('/rss/channel/item/enclosure'); 
        foreach($encls as $encl) { 
            print_r('<img src='.$encl->attributes()->url.'/>');
            echo('<br>');
            }

}//end function getImage
谢谢你们!