错误:循环中的非对象上的 getElementsByTagName()


Error : getElementsByTagName() on a non-object in loop

我正在做一个rss阅读器:

..
..
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$x=$xmlDoc->getElementsByTagName('item');

  for ($i=$j=0; $i<=5; $i++) {


          $item_title=$x->item($i)->getElementsByTagName('title')
          ->item(0)->nodeValue;
..
..
}

我将数字限制为等于 5,但某些 xml 包含的项目少于 5 个,因此出现错误

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

我可以做$ilength但由于图像负载过重,我必须限制数量。如何解决上述错误?

因此,循环基于 5 和项目数。

不确定语法,但使用 JS 将是

for ($i=$j=0; $i<=5 && $i<$x.length ; $i++) {

尝试将代码更改为:

$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$x=$xmlDoc->getElementsByTagName('item');
$ct = ( count($x)<=5 ) ? count($x) : 5;
for ($i=$j=0; $i<=$ct; $i++) {
for ($i=$j=0; $i<=5; $i++) {
 ..
 ..
 $xmlDoc = new DOMDocument();
 if ($xmlDoc->load($xml)) { // do the stuffs if file is loaded
   $x=$xmlDoc->getElementsByTagName('item');
   $item_title=$x->item($i)->getElementsByTagName('title')
   ->item(0)->nodeValue;
   ..
   ..
 }
}

编辑:

if(is_object($x->item($i))) { // check if the loaded item is object.
  $item_title=$x->item($i)->getElementsByTagName('title')
  ->item(0)->nodeValue;
}

您希望 5 作为最大索引:

$m = 5;
for ($i = 0; $i <= $m; $i++) { ...

但仅当它大于结果中的元素数减去 1 时$x

$m = min(5, $x->length);

有关方便的min()功能的更详细描述,请参阅 http://php.net/min。

除此之外,在这里使用foreach限制迭代器通常要容易得多:

$items   = $xmlDoc->getElementsByTagName('item');
$limited = new LimitIterator(new IteratorIterator($items), 0, 5);
foreach ($limited as $item) {
    # ... just operate on $item ...
}

循环中不会再有任何无效$item。您的代码可能会变得更富有表现力,更易于阅读和修改。

相关文章:
  • 没有找到相关文章