0

http://feeds.feedburner.com/rb286中,有很多图片。但是,当我使用 simplXmlElement 将其转换为 xml 对象时,我无法看到图像。我的代码:

if (function_exists("curl_init")){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,"http://feeds.feedburner.com/rb286");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$data=curl_exec($ch);
curl_close($ch);
//print_r($data);   //here i'm able to see the images
     $doc=new SimpleXmlElement($data);
     print_r($doc);   //here i'm not able to see the images
  }

有人可以告诉我转换为 xml 对象后如何访问图像吗?谢谢你。

4

1 回答 1

2

您将不得不遍历主标签<content:encoded>中个人<items><channel>标签。我会使用xpath方法来选择标签。一旦你得到你想要的元素,你可以使用字符串操作工具,比如preg_match_all<img>来 grep出来:

编辑:添加了更精细的图像标签匹配,排除了 feedburner 和其他 cdn 中的广告。

$xml = simplexml_load_string(file_get_contents("http://feeds.feedburner.com/rb286"));

foreach ($xml->xpath('//item/content:encoded') as $desc) {
    preg_match_all('!(?<imgs><img.+?src=[\'"].*?http://feeds.feedburner.com.+?[\'"].+?>)!m', $desc, $>

    foreach ($m['imgs'] as $img) {
        print $img;
    }
}

标签是命名空间的<content:encoded>,所以如果你想使用 simplexml 的内置属性映射,你必须像这样处理它:

// obtain simplexml object of the feed as before
foreach ($xml->channel->item as $item) {
    $namespaces = $item->getNameSpaces(true);
    $content = $item->children($namespaces['content']);
    print $content->encoded; // use it howevery you want
}

您可以在此处阅读有关 xpath 查询语言的更多信息。

于 2012-07-23T06:57:59.623 回答