Can#39;t access XML node via xpath() (YT channel feed)(可以通过XPath()(YT频道提要)访问XML节点)
本文介绍了可以通过XPath()(YT频道提要)访问XML节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
被这一次难住了。在PHP中,我正在获取一个YouTube用户的vids提要并尝试访问节点,如下所示:
$url = 'http://gdata.youtube.com/feeds/api/users/HCAFCOfficial/uploads';
$xml = simplexml_load_file($url);
到目前为止,一切都很好。非常基本的东西。我可以通过运行以下命令看到数据返回:
echo '<p>Found '.count($xml->xpath('*')).' nodes.</p>'; //41
echo '<textarea>';print_r($xml);echo '</textarea>';
两者都打印我所期望的内容,而print_r
复制了XML结构。
但是,我不知道为什么返回零:
echo '<p>Found '.count($xml->xpath('entry')).'"entry" nodes.</p>';
在XML中有明显的entry
节点。这是通过运行以下命令确认的:
foreach($xml->xpath('*') as $node) echo '<p>['.$node->getName().']</p>';
...这会适当地输出"[Entry]"25次。那么,这可能是SimpleXML中的一个错误?这是更广泛的提要缓存系统的一部分,我对其他非YT提要没有任何问题,只有YT提要。
[更新]
This question显示,如果您这样做,它就会起作用
count($xml->entry)
但我很好奇为什么count($xml->xpath('entry'))
不起作用...
[更新2]
我可以很好地遍历YT的备用提要格式:
http://gdata.youtube.com/feeds/base/users/{user id}/uploads?alt=rss&v=2
Atom
发生这种情况是因为源是具有定义的默认命名空间的推荐答案文档。
<feed xmlns="http://www.w3.org/2005/Atom" ...
因为定义了名称空间,所以您还必须为XPath调用定义它。这样做很管用:
$url = 'http://gdata.youtube.com/feeds/api/users/HCAFCOfficial/uploads';
$xml = simplexml_load_file($url);
$xml->registerXPathNamespace('ns', 'http://www.w3.org/2005/Atom');
$results = $xml->xpath('ns:entry');
echo count($results);
这里要知道的主要一点是,SimpleXML尊重任何和所有定义的名称空间,您需要相应地处理它们,包括默认的名称空间。您将注意到您列出的第二个提要没有定义默认名称空间,因此XPath调用按原样运行良好。
这篇关于可以通过XPath()(YT频道提要)访问XML节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:可以通过XPath()(YT频道提要)访问XML节点


基础教程推荐
猜你喜欢
- 如何在 Laravel 中使用 React Router? 2022-01-01
- Cron Jobs 调用带有变量的 PHP 脚本 2022-01-01
- PHP 类:全局变量作为类中的属性 2021-01-01
- 在PHP中根据W3C规范Unicode 2022-01-01
- PHP PDO MySQL 查询 LIKE ->多个关键词 2021-01-01
- 学说 dbal querybuilder 作为准备好的语句 2022-01-01
- 如何在 Laravel 5.3 注册中添加动态下拉列表列? 2021-01-01
- YouTube API v3 点赞视频,但计数器不增加 2022-01-01
- 如何替换eregi() 2022-01-01
- 有什么方法可以用编码 UTF-8 而不是 Unicode 返回 PHP`json_encode`? 2021-01-01