Доступ к свойствам XML, которые имеют двоеточие в имени с помощью PHP

Я пытаюсь получить информацию о видео с фида YouTube на YouTube, например, заголовок и эскиз.

Давайте возьмем этот фид в качестве примера: http://gdata.youtube.com/feeds/api/videos/CevxZvSJLk8

Вот код, который у меня есть сейчас:

 $videoURL = 'http://gdata.youtube.com/feeds/api/videos/CevxZvSJLk8'; $sxml = simplexml_load_file($videoURL); print_r($sxml); 

Однако, похоже, это не включает медиа: групповая часть xml-листа.

По сути, я пытаюсь получить эти два значения:

 entry -> media:group -> media:title entry -> media:group -> media:thumbnail 

EDIT: Это решение, с которым я закончил чтение других подобных вопросов.

 $videoTitle = $sxml->children('media', true)->group->title; $videoThumbnail = $sxml->children('media', true)->group->thumbnail->attributes()->url; 

Related of "Доступ к свойствам XML, которые имеют двоеточие в имени с помощью PHP"

Двоеточие в имени тега разделяет префикс пространства имен от локального элемента или имени атрибута. В фиде в вопросе есть несколько пространств имен.

  • http://www.w3.org/2005/Atom
  • http://purl.org/atom/app# с app префиксом
  • http://search.yahoo.com/mrss/ с префиксом media
  • http://schemas.google.com/g/2005 с префиксом gd
  • http://gdata.youtube.com/schemas/2007 с префиксом yt

Префикс пространства имен является псевдонимом для фактического пространства имен, он действителен только для документа и может быть изменен для дочерних узлов. Следующий фид мог использовать префиксный atom для http://www.w3.org/2005/Atom . Поэтому в зависимости от префикса пространства имен из документа это плохая идея.

Если вы используете Xpath fo для извлечения элементов из документа, вы можете зарегистрировать свои собственные префиксы для используемых пространств имен. В следующем примере выбирается заголовок media rss и URL большого эскиза непосредственно в виде строк. Если элемент не существует, он возвращает пустую строку.

 $videoURL = 'http://gdata.youtube.com/feeds/api/videos/CevxZvSJLk8'; $dom = new DOMDocument(); $dom->load($videoURL); $xpath = new DOMXPath($dom); $xpath->registerNamespace('mrss', 'http://search.yahoo.com/mrss/'); var_dump( $xpath->evaluate('string(//mrss:title)', NULL, FALSE), $xpath->evaluate('string(//mrss:thumbnail[@width="480"]/@url)', NULL, FALSE) ); 

Вывод:

 string(28) "Katy Perry - Roar (Official)" string(40) "http://img.ruphp.com/php/0.jpg"