使用 simpleXML 获取 XML 属性



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

尝试 #1

<?php
$xml = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos?author=Google");
echo $xml->entry[0]->yt:statistics['viewCount'];
?>

尝试 #2

<?php
$xml = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos?author=Google");
echo $xml->entry[0]->yt:statistics->attributes()->viewCount;
?>

两者都返回空白,尽管 SimpleXML 正在工作,但我试图获取提要的标题,这奏效了!

有什么想法吗?

我已经在SO和其他网站上查看了大量其他示例,但不知何故这不起作用? PHP 是否识别出":"是截断,还是我只是在做一些愚蠢的事情?

谢谢,非常感谢任何回复!

如果您只想获取YouTube视频的观看次数,则必须指定视频ID。您可以在每个视频网址中找到 youtube ID。例如"http://www.youtube.com/watch?v=ccI-MugndOU",所以id是ccI-MugndOU。为了获得观看次数,请尝试下面的代码

$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框架中的gdata组件。也可以作为单独的模块使用,因此您无需使用整个 zend。

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

您尝试的行实际上应如下所示:

echo (string)$xml->entry[0]->children('yt', true)->statistics->attributes(NULL)->viewCount;

要分解一下:

  • (string) - 这只是一个好习惯:你想要属性的字符串内容,而不是表示它的 SimpleXML 对象
  • $xml->entry[0] - 正如预期的那样
  • ->children('yt', true) - 切换到本地别名为"yt"的命名空间
  • ->statistics - 正如预期的那样
  • ->attributes(NULL) - 从技术上讲,属性"viewCount"回到默认命名空间中,因为它没有前缀"yt:",所以我们必须切换回来才能看到它
  • ->viewCount - 运行->attributes()只给我们属性,这些属性是用->foo而不是['foo']
  • 访问的

相关内容

  • 没有找到相关文章

最新更新