2010-03-23 30 views
15

Próbuję pobrać dane wideo z tego kanału na youtube i dodać interesujące dane do tablicy i użyć ich później, ale jak widać z kanału niektóre wideoklipy to " martwe ", co powoduje problemy z moim kodem.SimpleXML - "Węzeł już nie istnieje"

Pojawia się błąd "Węzeł już nie istnieje", gdy próbuję uzyskać dostęp do $ attrs ['url']. Próbowałem wiele godzin, aby znaleźć sposób sprawdzenia, czy węzeł istnieje przed uzyskaniem do niego dostępu, ale nie mam szczęścia.

Jeśli ktokolwiek mógłby mi pomóc albo sparsować paszę w inny sposób z tym samym wynikiem, albo utworzyć sprawdzony, jeśli działa, byłbym najbardziej szczęśliwy. Z góry dziękuję

$url = 'http://gdata.youtube.com/feeds/api/playlists/18A7E36C33EF4B5D?v=2'; 

$sxml = simplexml_load_file($url); 
$i = 0; 
$videoobj; 

foreach ($sxml->entry as $entry) { 
    // get nodes in media: namespace for media information 
    $media = $entry->children('http://search.yahoo.com/mrss/'); 

    // get video player URL 
    $attrs = $media->group->player->attributes(); 
    $videoobj[$i]['url'] = $attrs['url']; 

    // get video thumbnail 
    $attrs = $media->group->thumbnail[0]->attributes(); 
    $videoobj[$i]['thumb'] = $attrs['url']; 
    $videoobj[$i]['title'] = $media->group->title; 
    $i++; 
} 

Odpowiedz

18
if ($media->group->thumbnail && $media->group->thumbnail[0]->attributes()) { 
    $attrs = $media->group->thumbnail[0]->attributes(); 
    $videoobj[$i]['thumb'] = strval($attrs['url']); 
    $videoobj[$i]['title'] = strval($media->group->title); 
} 
+0

Dzięki! Ta kontrola rozwiązała mój problem :) –

+3

Pozwól mi zasugerować problem, spróbuj wyjaśnić trochę o problemie. To bardzo pomaga. –

+0

Ważna sprawa - sprawdź '$ media-> group-> thumbnail [0]' - potrzebujesz sprawdzić ten obiekt xml jako pusty. Jeśli jest to prawda, to przy każdej próbie rozwiąż '$ media-> group-> thumbnail [0] -> attributes()' możesz uzyskać ten błąd. – Enyby

8

metody SimpleXML zawsze powrócić obiektów, które same są połączone do oryginalnego dokumentu (jakiś wewnętrzny thingy związanej libxml). Jeśli chcesz przechowywać te dane do późniejszego wykorzystania, rzucił ją jako ciąg coś takiego:

$videoobj[$i]['url'] = (string) $attrs['url']; 
$videoobj[$i]['thumb'] = (string) $attrs['url']; 
$videoobj[$i]['title'] = (string) $media->group->title; 
+1

wciąż otrzymuję ten sam błąd na tej rzędu: $ videoobj [$ i] [ 'url'] = (string) $ attrs [ 'url']; Odlewanie nie pomaga :( –

Powiązane problemy