试图在rss feed脚本上获取非对象的属性

时间:2014-03-02 10:32:37

标签: php rss domdocument

我有以下脚本

public function NewsRss() {
$rss = new DOMDocument();
libxml_use_internal_errors(true);
$rss->load('http://www.autoexpress.co.uk/feeds/all');
$feed = array();
foreach ($rss->getElementsByTagName('item') as $node) {
  $htmlStr = $node->getElementsByTagName('description')->item(0)->nodeValue;
  $html = new DOMDocument();        
  $html->loadHTML($htmlStr);
  $desc = $html->getElementsByTagName('p')->item(0)->nodeValue;
  //var_dump($desc);
  $imgTag = $html->getElementsByTagName('img');
  $img = ($imgTag->length==0)?'noimg.png':$imgTag->item(0)->getAttribute('src');
  $item = array (
    'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
    'desc' => $desc,
    'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
    'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
'image' => $img,
  );
  array_push($feed, $item);
}
$limit = 3;
for($x=0;$x<$limit;$x++) {
  $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']);
  $link = $feed[$x]['link'];
  $description = $feed[$x]['desc'];
  $date = date('l F d, Y', strtotime($feed[$x]['date']));
  echo '<div class="news-row-index">';
  echo '<div class="details-index"><p><h5><a href="'.$link.'" target="_blank" title="'.$title.'">'.$title.'</a></h5>';
  echo '<small><em>Posted on '.$date.'</em></small></p>';
  echo '<div class="img"><a href="'.$link.'" target="_blank" title="'.$title.'"><img src="'.$feed[$x]['image'].'" height="79" width="89"></a></div>';
  echo '<p>'.$description.'</p></div>';
  echo '</div>';
}
echo '<a style="margin-left:10px;" class="view-all-but" target="_blank" href="http://www.autoexpress.co.uk/feeds/all">View all</a>';

}

问题是我们向我展示了这样的通知 这是Notice: Trying to get property of non-object in on line 10 $desc = $html->getElementsByTagName('p')->item(0)->nodeValue;但如果我隐藏错误一切正常,只是我正在尝试清理我的错误脚本,并且在这种情况下不知道从哪里开始。我知道->不应该多次使用。 请帮助我,非常感谢。我在OOP和rss中都是一个菜鸟。

1 个答案:

答案 0 :(得分:1)

看起来没有找到p标签,所以对getElementsByTagName的调用返回一个空列表,然后你尝试在空列表上调用item(0),这就是你得到错误的原因。

你可以将它分成2行来检查没有元素:

$p = $html->getElementsByTagName("p");
if($p->length > 0) {
    $desc = $p->item(0)->nodeValue;
} else {
    $desc = "";
}