无法解析节点不再存在错误

时间:2011-05-01 08:04:13

标签: php simplexml

我正在尝试使用youtube xml来显示一些数据,但会弹出此错误。 在teory我甚至知道什么是错的

$xmlData = simplexml_load_string(utf8_encode(file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$v.'?fields=title,yt:recorded,yt:statistics'))); //$v is video array
$title = (string)$xmlData->title;
$entry = $xmlData;

$namespaces = $entry->getNameSpaces(true);
$yr = $entry->children((string)$namespaces['yt']);

// get <yt:recorded> node for date and replace yyyy-mm-dd to dd.mm.yyyy
$year = substr($yr->recorded, 0,4); 
$month = substr($yr->recorded, 5,2);
$day = substr($yr->recorded, 8,2);
$recorddate = $day.".".$month.".".$year;

// get <yt:stats> node for viewer statistics, and here the problem starts (error appears if view count is 0 / node does not exist)
  $attrs = $yr->statistics->attributes(); 
      $viewCount = $attrs[(string)'viewCount']; 

                     { echo '<p>'.$recorddate.'<br>'.$title.'<br>'; 
                     if ($viewCount > 0)
 echo $viewCount.'</p></div>';
else
echo '(show some other text)</p></div>';      }

我知道要解决这个问题,你必须告诉php该节点是字符串但我仍然无法在不破坏其余代码的情况下做到这一点

4 个答案:

答案 0 :(得分:3)

$viewCount = 0;
if ($yr->statistics->count() > 0) {
$attrs = $yr->statistics->attributes();
 $viewCount = $attrs['viewCount'];
}

很好,但对于那些使用PHP之前的5.3.0,这将无法正常工作:(  任何更好的解决方案?

答案 1 :(得分:2)

解决方案也适用于php用户&lt; = 5.2

  $viewCount = 0;
if (count($yr->statistics) > 0) {
    $attrs = $yr->statistics->attributes(); 
    $viewCount = $attrs['viewCount'];
}

答案 2 :(得分:1)

我刚遇到这个问题。看起来您需要先检查是否有可用的统计信息,然后尝试访问属性。

$viewCount = 0;
if ($yr->statistics->count() > 0) {
    $attrs = $yr->statistics->attributes(); 
    $viewCount = $attrs['viewCount'];
}

如果未观看视频,YouTube似乎无法添加属性。因此,如果您有一个视图计数为0的视频,YouTube不会将viewCount设置为0,它只是完全忽略它。

答案 3 :(得分:0)

你没有正确使用施法。此行 NOT SimpleXMLElement对象强制转换为字符串。 (它将字符串'viewCount'转换为字符串,这是非感性的)

$viewCount = $attrs[(string)'viewCount'];

这个确实:

$viewCount = (string) $attrs['viewCount'];