[英]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>");
}
?>
I get this error :我收到此错误:
Fatal error: Call to a member function getElementsByTagName() on a non-object in C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\v9\\naloga2.php on line 19.致命错误:调用第 19 行 C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\v9\\naloga2.php 中非对象的成员函数 getElementsByTagName()。
I get this error when there are less than 10 items in RSS.当 RSS 中的项目少于 10 个时,我会收到此错误。
You have while($i<=9)
then you ask for each element, 0-9.你有while($i<=9)
然后你要求每个元素,0-9。 So when you don't have 10 elements, $x->item($i)
returns nothing, and thus calling ->getElementsByTagName('title')
gives an error since you're calling the method on nothing.因此,当您没有 10 个元素时, $x->item($i)
返回任何内容,因此调用->getElementsByTagName('title')
会产生错误,因为您没有调用该方法。
You want to restructure to this:你想重组为:
<?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>");
}
?>
Suppose there are 8 items.假设有 8 个项目。 Your code你的代码
$i=0;
while($i<=9) {
$i++;
...
}
iterates up to i === 10. Therefore this code迭代到 i === 10。因此这段代码
$item_title = $x->item($i)
doesn't return an element - since the last element has an index of 7 [valid 0 .. 7].不返回元素 - 因为最后一个元素的索引为 7 [valid 0 .. 7]。
Try this:尝试这个:
for( $i=0; $i < $x->length; $i++ ) {
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.