我有以下脚本
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(' & ', ' & ', $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中都是一个菜鸟。
答案 0 :(得分:1)
看起来没有找到p标签,所以对getElementsByTagName的调用返回一个空列表,然后你尝试在空列表上调用item(0),这就是你得到错误的原因。
你可以将它分成2行来检查没有元素:
$p = $html->getElementsByTagName("p");
if($p->length > 0) {
$desc = $p->item(0)->nodeValue;
} else {
$desc = "";
}