我正在做一个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但是由于图像负载过重,我必须限制数量。如何解决上面的错误?
答案 0 :(得分:0)
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;
}
答案 1 :(得分:0)
所以基于循环关闭5和项目数。
不确定语法但是JS会是
for ($i=$j=0; $i<=5 && $i<$x.length ; $i++) {
答案 2 :(得分:0)
尝试将代码更改为:
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$x=$xmlDoc->getElementsByTagName('item');
$ct = ( count($x)<=5 ) ? count($x) : 5;
for ($i=$j=0; $i<=$ct; $i++) {
答案 3 :(得分:0)
您希望5作为最大索引:
$m = 5;
for ($i = 0; $i <= $m; $i++) { ...
但只有当它大于结果$x
中的元素数量减去一个时:
$m = min(5, $x->length);
有关方便的min()
功能的更详细说明,请参阅http://php.net/min。
除此之外,使用foreach
和LimitIterator通常要容易得多:
$items = $xmlDoc->getElementsByTagName('item');
$limited = new LimitIterator(new IteratorIterator($items), 0, 5);
foreach ($limited as $item) {
# ... just operate on $item ...
}
循环内部不会再有任何无效$item
自动出现。而且您的代码可能会更具表现力,更易于阅读和修改。