【问题标题】:Get XML Attribute with SimpleXML使用 SimpleXML 获取 XML 属性
【发布时间】:2012-10-03 02:44:37
【问题描述】:

我正在尝试获取$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 是否将 ':' 识别为截断,还是我只是在做一些愚蠢的事情?

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

【问题讨论】:

  • “PHP 是否将 ':' 识别为截断,还是我只是在做一些愚蠢的事情?”。不,是的。 :) yt:statistics 是 PHP 语法错误。您不能将它与 SimpleXML 一起使用,也不能在其他任何地方使用它。 SimpleXML 对 XML 名称空间的支持充其量是不稳定的。您应该改用 DOMDocument 和 DOMXPath。阅读php.net/manual/en/domxpath.registernamespace.php 开始。
  • @Tomalak 与 SimpleXML 的大部分内容一样,命名空间支持工作得非常好,但文档很少,因此很难理解。

标签: php simplexml youtube-api


【解决方案1】:

如果您只想获取 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;

【讨论】:

  • 感谢您的回答 :) 它帮助我意识到 YouTube 也有 JSON api,这更容易工作!再次感谢!
【解决方案2】:

我会使用 zend 框架中的gdata component。也可作为单独的模块使用,因此您不需要使用整个 zend。

【讨论】:

  • 感谢您的回复 :-) 我的主机不喜欢组件,安装这些组件非常痛苦 :-( 但无论如何,谢谢!
  • 您不必在服务器上安装任何东西。检查此链接。 ecommercedeveloper.com/articles/…
【解决方案3】:

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

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

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

分解:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 2012-05-19
    • 2014-04-26
    • 2015-02-01
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多