PHP xpath:提取所有节点,甚至带有命名空间

PHP xpath:提取所有节点,甚至带有命名空间

我对 PHP 的 simplexml 和 xpath 实现还不熟悉,但我想执行以下操作:

我有这个 XML 文件(摘自 youtube API 响应):

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:yt="http://gdata.youtube.com/schemas/2007">
  <id>tag:youtube.com,2008:standardfeed:global:most_popular</id>
  <entry>
     <id>tag:youtube.com,2008:video:_OBlgSz8sSM</id>
     <author>
        <name>HDCYT</name>
        <uri>http://gdata.youtube.com/feeds/api/users/HDCYT</uri>
        <yt:userId>fHZCZHykS3IQDPyFfnqjWg</yt:userId>
      </author>
  </entry>
</feed>

我想要做的是遍历每个“条目”标签(还有更多但只列出一个)并为每个条目提取各种值(如作者 - > yt:userId)。

我的代码如下:

$xml = simplexml_load_string($xmlString);
$xml->registerXPathNamespace('a', 'http://www.w3.org/2005/Atom');
$xml->registerXPathNamespace('yt', 'http://gdata.youtube.com/schemas/2007');
$entries = $xml->xpath("//a:entry");
foreach($entries as $t) {
    print_r($t);
}

问题是,提取的对象不包含其命名空间(或默认命名空间)之外的任何内容:

SimpleXMLElement Object
(
    [id] => tag:youtube.com,2008:video:_OBlgSz8sSM
    [author] => SimpleXMLElement Object
    (
        [name] => HDCYT
        [uri] => http://gdata.youtube.com/feeds/api/users/HDCYT
    )
 )

那么...我如何在我的 xpath 结果中保留 yt:userId 标签?

谢谢

答案1

看来我被 print_r 函数误导了。即使其他命名空间中的内容没有通过 print_r 显示出来,它仍然存在。

为了访问我需要的数据,我必须对 $t 对象执行以下操作:

 $userid = $t->xpath("//yt:userId");

相关内容