繁体   English   中英

致命错误:在非对象上调用成员函数 getElementsByTagName()

[英]Fatal error: Call to a member function getElementsByTagName() on a non-object

<?php 
$q=$_GET["q"];
$xml = $q;
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;
echo("<b> $channel_title </b>" );
echo("<br>");
echo($channel_desc . "</p>");
$x=$xmlDoc->getElementsByTagName('item');
$i=0;
while($i<=9)
  {
  $i++;
  $item_title=$x->item($i)->getElementsByTagName('title')
  ->item(0)->childNodes->item(0)->nodeValue;
  $item_desc=$x->item($i)->getElementsByTagName('description')
  ->item(0)->childNodes->item(0)->nodeValue;
  echo ("<b> $item_title </b>"  );
  echo ("<br>");
  echo ($item_desc . "</p>"); 
  }
?>

我收到此错误:

致命错误:调用第 19 行 C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\v9\\naloga2.php 中非对象的成员函数 getElementsByTagName()。

当 RSS 中的项目少于 10 个时,我会收到此错误。

你有while($i<=9)然后你要求每个元素,0-9。 因此,当您没有 10 个元素时, $x->item($i)返回任何内容,因此调用->getElementsByTagName('title')会产生错误,因为您没有调用该方法。

你想重组为:

<?php 
$q=$_GET["q"];
$xml = $q;
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
echo("<b> $channel_title </b>" );
echo("<br>");
echo($channel_desc . "</p>");
$x=$xmlDoc->getElementsByTagName('item');

$counter = 0 ;
foreach($x as $item)
  {
      if(++$counter > 9) break;
      $item_title=$item->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
      $item_desc=$item->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
      echo ("<b> $item_title </b>"  );
      echo ("<br>");
      echo ($item_desc . "</p>"); 
  }
?>

假设有 8 个项目。 你的代码

$i=0;
while($i<=9) {
  $i++;
  ...
}

迭代到 i === 10。因此这段代码

$item_title = $x->item($i)

不返回元素 - 因为最后一个元素的索引为 7 [valid 0 .. 7]。

尝试这个:

  for( $i=0; $i < $x->length; $i++ ) {
    ...
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM