Получить атрибут XML с SimpleXML

я пытаюсь получить$xml->entry->yt:statistics->attributes()->viewCount атрибут, и яя пробовал кое-что с SimpleXML, и я могуэто действительно работает!

Попытка № 1

entry[0]->yt:statistics['viewCount'];
?>

Попытка № 2

entry[0]->yt:statistics->attributes()->viewCount;
?>

Оба из них возвращают пустое значение, хотя SimpleXML работает, я попытался получить фид 'Название, которое сработало!

Есть идеи? Я

Я смотрел на множество других примеров на SO и других сайтах, но почему-то это не такт работает? распознает ли PHP ':' быть отрезанным, или я просто делаю что-то глупое?

Спасибо, любые отзывы с благодарностью!

 IMSoP13 окт. 2012 г., 22:54
@Tomalak Как и большая часть SimpleXML, поддержка пространства имен работает отлично, но плохо документирована и, следовательно, плохо понимается.
 Tomalak12 окт. 2012 г., 11:57
распознает ли PHP ':' быть отрезанным, или я просто делаю что-то глупое? ", Нет да. :)yt:statistics является синтаксической ошибкой PHP Вы можете'не использовать это с SimpleXML, и вы не можетене использовать его где-либо еще. SimpleXML»Поддержка пространств имен XML в лучшем случае шаткая. Вы должны использовать DOMDocument и DOMXPath вместо этого. Читатьphp.net/manual/en/domxpath.registernamespace.php для начала.

Ответы на вопрос(3)

Решение Вопроса

вам нужно указать идентификатор видео. Идентификатор YouTube находится в каждом URL-адресе видео. Например "http://www.youtube.com/watch?v=ccI-MugndOU» таким образом, идентификатор 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;
 unicornication12 окт. 2012 г., 12:16
Спасибо за ваш ответ :) Это помогло мне понять, что на YouTube также есть JSON API, который был намного проще в работе! Еще раз спасибо!

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

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

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

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

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

компонент gdata из Zend Framework. Также доступен в виде отдельного модуля, так что вы неТ нужно использовать весь зенд.

 Napolux12 окт. 2012 г., 14:45
Ты нене нужно ничего устанавливать на вашем сервере. Проверьте эту ссылку.ecommercedeveloper.com/articles/...
 unicornication12 окт. 2012 г., 12:17
Спасибо за ваш ответ :-) Мой хост нене люблю компоненты, этоДостаточно больно, чтобы установить эти :-( но независимо, спасибо!

Ваш ответ на вопрос