Php 试图在rss源脚本上获取非对象的属性
我有以下脚本Php 试图在rss源脚本上获取非对象的属性,php,rss,domdocument,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->
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>';
public function NewsRss(){
$rss=新的DOMDocument();
libxml\u使用\u内部错误(true);
$rss->load($rss)http://www.autoexpress.co.uk/feeds/all');
$feed=array();
foreach($rss->getElementsByTagName('item')作为$node){
$htmlStr=$node->getElementsByTagName('description')->item(0)->nodeValue;
$html=新的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=数组(
'title'=>$node->getElementsByTagName('title')->项(0)->nodeValue,
'desc'=>$desc,
'link'=>$node->getElementsByTagName('link')->项(0)->nodeValue,
'date'=>$node->getElementsByTagName('pubDate')->项(0)->节点值,
“图像”=>$img,
);
阵列推送($feed,$item);
}
$limit=3;
对于($x=0;$xgetElementsByTagName($p')->item(0)->nodeValue;
,但是如果我隐藏错误,一切都会正常工作,只是我正在尝试清理我的错误脚本,在这种情况下,我不知道从何处开始。我知道->
不应该被多次使用。
请在这方面帮助我,我将不胜感激。我是OOP和rss中的一个noob。看起来没有找到p标记,因此调用getElementsByTagName返回一个空列表,然后您尝试调用空列表中的项(0),这就是为什么会出现错误的原因 您可以将其拆分为两行以检查是否没有元素:
$p = $html->getElementsByTagName("p");
if($p->length > 0) {
$desc = $p->item(0)->nodeValue;
} else {
$desc = "";
}
我添加了这个,而不是
$desc=$html->getElementsByTagName('p')->item(0)->nodeValue;
现在我得到了试图获取$desc=$p->item(0)中非对象的属性->nodeValue;
feed中的字符是这样的p>
,意思是
,这可能是原因吗?抱歉,它不返回null,它返回一个空列表,因此需要检查它的长度:if($p->length>0){