SimpleXML循环可以正常运行,但会中途停止

时间:2010-07-14 17:53:48

标签: php simplexml youtube-api

我有一个循环浏览来自youtube Feed的结果,它运行正常,但最后它失败并出现错误:

Warning: main() [function.main]: Node no longer exists in ../youtubereader.php on line 8
Warning: main() [function.main]: Node no longer exists in .../youtubereader.php on line 8
Fatal error: Call to a member function attributes() on a non-object in .../youtubereader.php on line 9

我的代码是:

<?php
error_reporting(E_ALL);
$feedURL = 'http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?max-results=50';
$sxml = simplexml_load_file($feedURL);
$i=0;
foreach ($sxml->entry as $entry) {
      $media = $entry->children('media', true);
      $watch = (string)$media->group->player->attributes()->url;
      $thumbnail = (string)$media->group->thumbnail[0]->attributes()->url;
      ?>
      <div class="videoitem">
        <div class="videothumb"><a href="<?php echo $watch; ?>" class="watchvideo"><img src="<?php echo $thumbnail;?>" alt="<?php echo $media->group->title; ?>" /></a></div>
        <div class="videotitle">
            <h3><a href="<?php echo $watch; ?>" class="watchvideo"><?php echo $media->group->title; ?></a></h3>
            <p><?php echo $media->group->description; ?></p>
        </div>
      </div>      
<?php $i++; if($i==3) { echo '<div class="clear small_v_margin"></div>'; $i=0; } } ?>

我的xml很好地从youtube回来了,肯定会有更多的结果而不是中断,任何想法为什么会这样做?

修改 在本地测试,使用wamp,它工作正常。仍然不在服务器上。直播,第24项后的缩略图没有返回缩略图。

5 个答案:

答案 0 :(得分:2)

从错误消息中可以看出它可能在此行中断开:

$thumbnail = (string)$media->group->thumbnail[0]->attributes()->url;

您是否有可能在没有缩略图的情况下获得结果?您似乎没有检查缩略图集合是否包含至少一个。

答案 1 :(得分:0)

当您使用children()抓取节点时,它可能无法传回有效值(这就是您收到警告的原因),然后您正在尝试对导致错误的错误对象执行操作。 PHP将允许您包装错误处理程序以获取更详细的信息。

我可能只是检查来自children()的返回值。

答案 2 :(得分:0)

答案 3 :(得分:0)

您确定没有在任何地方序列化/反序列化您的节点吗?甚至没有暗示,例如,使用会话或ORM? "Node no longer exists"是节点,父节点或所有者文档不再“活动”的情况下的典型错误。 (我们在会话中存储节点时没有使用它,而不首先将它们转换为字符串。)

您发布的代码100%与您在开发和实时服务器上运行的代码完全相同吗?你是如何运行它的(命令行或CGI或Apache模块)?版本是否相同?

我无法重现错误,但考虑到足够的信息,我可能会。

答案 4 :(得分:0)

我使用相同的代码段并且一切似乎都很好用我甚至做了很少的改动而且效果很好:)