Назад | Перейти на главную страницу

PHP xpath: извлечение всех узлов, даже с пространствами имен

Я новичок в реализации PHP simplexml и xpath, но вот что я хочу сделать:

У меня есть этот XML-файл (отрывок из ответа API YouTube):

<?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>

Я хочу перебрать каждый тег "entry" (их больше, но указан только один) и извлечь различные значения (например, author -> 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
    )
 )

Итак ... как мне сохранить тег yt: userId в моем результате xpath?

Спасибо

Кажется, меня ввела в заблуждение функция print_r. Даже если содержимое в других пространствах имен не отображается с помощью print_r, оно все еще там.

Чтобы получить доступ к нужным мне данным, мне пришлось сделать следующее с объектом $ t:

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