Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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 无法分析atom源_Php_Parsing_Xml Parsing_Atom Feed - Fatal编程技术网

Php 无法分析atom源

Php 无法分析atom源,php,parsing,xml-parsing,atom-feed,Php,Parsing,Xml Parsing,Atom Feed,我正在实现Youtube推送通知并实现webhook。Youtube以atom提要的形式提供更新。我的问题是我无法解析那个提要 这是XML: <?xml version="1.0" encoding="UTF-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:yt="http://www.youtube.com/xml/schemas/2015"> <link rel="hub" href="https://p

我正在实现Youtube推送通知并实现webhook。Youtube以atom提要的形式提供更新。我的问题是我无法解析那个提要

这是XML:

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:yt="http://www.youtube.com/xml/schemas/2015">
<link rel="hub" href="https://pubsubhubbub.appspot.com" />
<link rel="self" href="https://www.youtube.com/xml/feeds/videos.xml?channel_id=UCaNoTnXcQQt3ody_cLZSihw" />
<title>YouTube video feed</title>
<updated>2018-03-01T07:21:59.144766801+00:00</updated>
<entry>
    <id>yt:video:vNQyYJqFopE</id>
    <yt:videoId>vNQyYJqFopE</yt:videoId>
    <yt:channelId>UCaNoTnXcQQt3ody_cLZSihw</yt:channelId>
    <title>Test Video 4</title>
    <link rel="alternate" href="https://www.youtube.com/watch?v=vNQyYJqFopE" />
    <author>
        <name>Testing</name>
        <uri>https://www.youtube.com/channel/UCaNoTnXcQQt3ody_cLZSihw</uri>
    </author>
    <published>2018-03-01T07:21:48+00:00</published>
    <updated>2018-03-01T07:21:59.144766801+00:00</updated>
</entry>

YouTube视频源
2018-03-01T07:21:59.144766801+00:00
yt:视频:vNQyYJqFopE
vNQyYJqFopE
UCaNoTnXcQQt3ody_cLZSihw
测试视频4

如何获取yt:videoId元素的值。我是PHP新手,如果我做错了什么,请纠正我。

试试这个(更新)

接通频道

echo $obj->xpath('//yt:videoId')[0];
// output: vNQyYJqFopE

似乎包含yt名称空间的XML元素(例如,
)没有被
simplexml\u load\u string
解析。我不知道为什么,但在您的例子中,视频id也存在于
元素中,您只需要提取最后一个值,或者简单地剪切它前面的
yt:video:
。这至少是一个简单的解决办法

如果使用直接指向
元素的命令,它也可以工作,如下所示:


XPath总是返回一个数组,因此您需要使用
[0]

获取第一个元素。请添加您尝试的“如何获取yt:videoId元素的值”的代码。我在输出中看不到该属性。该元素包含
。是否尝试了
$obj->entry->id
?不,让我试试。是的,我正在获取。但是我需要
yt:videoId的值
yt:videoId的值

$str = $obj->entry->id;
echo substr($str, strpos($str, "video:")+ 6);
$chan = $obj->entry->author->uri;
echo substr($chan , strpos($chan , "channel/")+ 8);
echo $obj->xpath('//yt:videoId')[0];
// output: vNQyYJqFopE