Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 试图在rss源脚本上获取非对象的属性_Php_Rss_Domdocument - Fatal编程技术网

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(' & ', ' &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>';
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){