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

Php 无法解析节点不再存在错误,php,simplexml,Php,Simplexml,我试图使用youtube xml显示一些数据,但出现了这个错误。 在托里,我甚至知道怎么了 $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-&

我试图使用youtube xml显示一些数据,但出现了这个错误。 在托里,我甚至知道怎么了

$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>';      }
$xmlData=simplexml\u加载\u字符串(utf8\u编码(文件\u获取\u内容http://gdata.youtube.com/feeds/api/videos/“.$v.”字段=标题,年初至今:已记录,年初至今:统计数据”)//$v是视频阵列
$title=(字符串)$xmlData->title;
$entry=$xmlData;
$namespaces=$entry->getNameSpaces(true);
$yr=$entry->children((字符串)$namespaces['yt']);
//获取日期节点并将yyyy-mm-dd替换为dd.mm.yyyy
$year=substr($yer->记录,0,4);
$month=substr($yr->记录,5,2);
$day=substr($yr->记录,8,2);
$recorddate=$day.“$month.”.“$year;
//获取用于查看器统计信息的节点,此时问题开始出现(如果视图计数为0/节点不存在,则会出现错误)
$attrs=$yr->statistics->attributes();
$viewCount=$attrs[(字符串)'viewCount'];
{echo''.$recorddate'.
'.$title'.
'; 如果($viewCount>0) echo$viewCount.“

”; 其他的 echo'(显示一些其他文本)

';}

我知道要解决这个问题,您必须告诉php节点是字符串,但如果不破坏其余代码,我仍然无法做到这一点

您没有正确使用强制转换。此行不会将
simplexmlement
对象强制转换为字符串。(它将字符串
'viewCount'
转换为一个字符串,这是非感官的)

这个是:

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

你没有正确使用铸造。此行不会将
simplexmlement
对象强制转换为字符串。(它将字符串
'viewCount'
转换为一个字符串,这是非感官的)

这个是:

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

我只是有这个问题。似乎您需要先检查是否有可用的统计信息,然后尝试访问属性

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

如果视频未被观看,YouTube似乎不会添加属性。因此,如果你的视频的浏览量为0,YouTube不会将浏览量设为0,它只是将其全部忽略。

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

$viewCount = 0;
if ($yr->statistics->count() > 0) {
    $attrs = $yr->statistics->attributes(); 
    $viewCount = $attrs['viewCount'];
}
$viewCount = 0;
if ($yr->statistics->count() > 0) {
$attrs = $yr->statistics->attributes();
 $viewCount = $attrs['viewCount'];
}
如果视频未被观看,YouTube似乎不会添加属性。因此,如果你有一个视频的浏览次数为0,YouTube不会将浏览次数设为0,它只是将其全部忽略

$viewCount = 0;
if ($yr->statistics->count() > 0) {
$attrs = $yr->statistics->attributes();
 $viewCount = $attrs['viewCount'];
}
不错,但是对于那些使用php 5.3.0之前版本的用户来说,这将不起作用:( 有更好的解决办法吗

不错,但是对于那些使用php 5.3.0之前版本的用户来说,这将不起作用:(
有更好的解决方案吗?

也适用于php用户的解决方案也适用于php用户的解决方案发布XML输入以及完整的错误消息。行号很重要,请务必提及这是哪一行。发布XML输入以及完整的错误消息。行号很重要,请务必注意这是哪一行。