2014-01-25 1 views
0

제목 및 미리보기 이미지 URL과 같은 YouTube XML 피드에서 비디오 정보를 가져 오려고합니다.이름에 콜론이있는 XML 속성에 PHP로 액세스

의 예로 들어이 피드 보자 : 미디어 포함 될 것 같지 않습니다, 그러나

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

: 여기 http://gdata.youtube.com/feeds/api/videos/CevxZvSJLk8

를 코드는 내가 지금 가지고 년대 XML의 그룹 일부 시트.

기본적으로, 나는이 두 값을 얻으려고 :

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

편집 : 이것은 내가 다른 유사한 질문을 읽고 함께가는 결국 솔루션입니다.

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

1)에서 print_r ('사용하지 마십시오)','위해 var_dump()'등 SimpleXML을 가진; 그들은 당신에게 거짓말을합니다. 2) "simplexml 콜론", "simplexml 네임 스페이스"등의 검색 StackOverflow; 이 질문은 이미 백만 번에 관해 물었습니다. – IMSoP

+0

다른 답변으로 알게되었습니다. 감사. – zen

답변

0

태그 이름의 콜론은 로컬 요소 또는 특성 이름에서 네임 스페이스 접두사를 구분합니다. 질문의 피드에는 여러 네임 스페이스가 있습니다. 접두사

  • 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/2007yt

T 그는 네임 스페이스 접두사가 실제 네임 스페이스의 별칭이며, 문서에만 유효하며 자식 노드에 대해 변경할 수 있습니다. 다음 피드는 http://www.w3.org/2005/Atom에 접두사 atom을 사용할 수 있습니다. 따라서 문서의 네임 스페이스 접두사에 따라 나쁜 생각입니다.

Xpath를 사용하여 문서의 요소를 가져 오는 경우 사용 된 네임 스페이스에 대한 고유 한 접두사를 등록 할 수 있습니다. 다음 예제에서는 미디어 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://i1.ytimg.com/vi/CevxZvSJLk8/0.jpg" 
+0

좋은 소개지만 제안 된 솔루션은 SimpleXML 자체의 네임 스페이스 기능 ('-> children ($ ns)'및'-> attributes()을 사용하기보다는 OP가 이전에 사용하지 않은 두 가지 기술 (DOM 및 XPath) $ ns)'). – IMSoP

+0

예 @IMSoP가 맞습니다. '$ sxml-> children ('media', true) -> group-> title;'title과'$ sxml-> children ('media', true) -> group-> url;을 얻기 위해 thumbnail-> attributes() -> url; – zen

+0

SimpleXML 변형은 덜 안정적이며 XML 네임 스페이스 접두어 및 누락 된 요소 (외부 리소스)의 유효한 변경으로 인해 PHP 오류가 발생할 수 있습니다. – ThW

관련 문제