Получить атрибут XML с помощью SimpleXML

Я пытаюсь получить $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 распознает «:» как отсечку, или я просто делаю что-то глупое?

Спасибо, любые отзывы очень ценятся!

Related of "Получить атрибут XML с помощью SimpleXML"

Если вы просто хотите получить количество просмотров видео с YouTube, вам необходимо указать идентификатор видео. Идентификатор youtube находится в каждом видеоролике. Например, «http://www.youtube.com/watch?v=ccI-MugndOU&#xBB;, поэтому 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; 

Я бы использовал компонент gdata из рамки zend. Также доступен как отдельный модуль, поэтому вам не нужно использовать весь zend.

Префикс yt: указывает, что этот элемент находится в другом «пространстве имен XML» из остальной части документа. Вы должны сказать SimpleXML переключиться на это пространство имен с помощью метода ->children() .

Строка, которую вы пытались, должна выглядеть так:

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

Чтобы сломать это:

  • (string) – это просто хорошая привычка: вам нужно содержимое строки атрибута, а не объект SimpleXML, представляющий его
  • $xml->entry[0] – как и ожидалось
  • ->children('yt', true) – переключиться на пространство имен с локальным псевдонимом 'yt'
  • ->statistics – как и ожидалось
  • ->attributes(NULL) – технически атрибут «viewCount» возвращается в пространство имен по умолчанию, поскольку он не имеет префикса «yt:», поэтому нам нужно вернуться назад, чтобы увидеть его
  • ->viewCount – running ->attributes() дает нам ничего, кроме атрибутов, к которым обращаются ->foo not ['foo']