1

我尝试 使用 php 解析带有图像的 rss 提要上的链接。

我尝试解析 rss 提要以显示附件标签中的图像。我尝试了该链接上给出的解决方案。但它不起作用。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);

} ?>

4

3 回答 3

1
$imgs=$xml->xPath('//channel/item/enclosure');
foreach($imgs as $img) {
    var_dump($img->attributes());
}
于 2012-07-14T09:32:33.543 回答
1

这个单一的 XPath 表达式

/rss/channel/item/enclosure/@*

选择作为顶部元素的子元素enclosure的所有元素的子元素的所有元素的所有属性。channelrss

与使用以下方法相比,这既简单又高效:

//channel/item/enclosure

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

请记住

//以伪运算符开头的 XPath 表达式的求值通常比使用特定路径慢得多——因为这会导致未优化的 XPath 处理器遍历整个文档。

于 2012-07-14T19:40:22.737 回答
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

谢谢你们!

于 2012-07-15T00:26:54.910 回答