Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用SimpleXML获取XML属性_Php_Simplexml_Youtube Api - Fatal编程技术网

Php 使用SimpleXML获取XML属性

Php 使用SimpleXML获取XML属性,php,simplexml,youtube-api,Php,Simplexml,Youtube Api,我正在尝试获取$xml->entry->yt:statistics->attributes()->viewCount属性,我尝试了一些SimpleXML的东西,但我真的无法让它工作 尝试#1 entry[0]->yt:statistics['viewCount']; ?> 尝试#2 entry[0]->yt:statistics->attributes()->viewCount; ?> 这两个都返回空白,虽然SimpleXML正在工作,但我尝试获取提要的标题,这很有效 有什么想法吗 我看过S

我正在尝试获取
$xml->entry->yt:statistics->attributes()->viewCount
属性,我尝试了一些SimpleXML的东西,但我真的无法让它工作

尝试#1

entry[0]->yt:statistics['viewCount'];
?>
尝试#2

entry[0]->yt:statistics->attributes()->viewCount;
?>
这两个都返回空白,虽然SimpleXML正在工作,但我尝试获取提要的标题,这很有效

有什么想法吗

我看过SO和其他网站上的大量其他示例,但不知何故,这不起作用?PHP是否认识到“:”是一个截止线,或者我只是在做一些愚蠢的事情


谢谢,非常感谢您的回复

如果您只想获取youtube视频的viewcount,则必须指定视频ID。youtube ID可在每个视频url中找到。例如“http://www.youtube.com/watch?v=ccI-所以id是ccI MugndOU。要获取viewcount,请尝试下面的代码

$sample_video_ID = "ccI-MugndOU";
$JSON = file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$sample_video_ID}&alt=json");
$JSON_Data = json_decode($JSON);
$views = $JSON_Data->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'};
    echo $views;

我将使用来自zend框架的。也可以作为单独的模块使用,因此不需要使用整个zend。

前缀将该元素标记为与文档其余部分不同的“XML名称空间”。您必须告诉SimpleXML使用
->children()
方法切换到该名称空间

您尝试的线条实际上应该如下所示:

echo (string)$xml->entry[0]->children('yt', true)->statistics->attributes(NULL)->viewCount;
要分解这一点:

  • (string)
    -这只是一个好习惯:您需要属性的字符串内容,而不是表示它的SimpleXML对象
  • $xml->条目[0]
    -如预期
  • ->children('yt',true)
    -切换到本地别名为'yt'的命名空间
  • ->统计数据
    -如预期
  • ->attributes(NULL)
    -从技术上讲,属性“viewCount”返回默认名称空间,因为它没有前缀“yt:”,所以我们必须切换回才能看到它
  • ->viewCount
    -运行
    ->attributes()
    只会给我们提供属性,可以使用
    ->foo
    而不是
    ['foo']

“PHP是否认识到“:”是一个截止点,还是我只是在做一些愚蠢的事情?”。不,是的
yt:statistics
是一个PHP语法错误。不能在SimpleXML中使用它,也不能在其他任何地方使用它。SimpleXML对XML名称空间的支持充其量是不稳定的。您应该改用DOMDocument和DOMXPath。开始阅读。@Tomalak与SimpleXML的许多内容一样,名称空间支持工作得非常好,但文档记录得很差,因此理解得也很差。感谢您的回答:)它帮助我认识到YouTube也有JSON api,这更容易操作!再次感谢!感谢您的回复:-)我的主机不喜欢组件,安装这些组件很痛苦:-(但无论如何,谢谢!您不必在服务器上安装任何东西。请检查此链接。
$sample_video_ID = "ccI-MugndOU";
$JSON = file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$sample_video_ID}&alt=json");
$JSON_Data = json_decode($JSON);
$views = $JSON_Data->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'};
    echo $views;
echo (string)$xml->entry[0]->children('yt', true)->statistics->attributes(NULL)->viewCount;