2010-03-23 11 views
15

Je suis en train d'obtenir les données vidéo de cette youtube flux de liste de lecture et d'ajouter les données intéressantes à un tableau et une utilisation plus tard, mais comme vous pouvez le voir dans l'alimentation des videolinks sont " mort "et cela entraîne des problèmes pour mon code.SimpleXML - « Noeud n'existe plus »

L'erreur que je reçois est « nœud n'existe plus » lorsque je tente d'accéder à $ attrs [ « url »]. J'ai essayé pendant des heures de trouver un moyen de vérifier si le nœud existe avant d'y accéder mais je n'ai pas de chance.

Si quelqu'un pouvait me aider soit analyser le flux d'une autre manière avec le même résultat ou créer un si-nœud existe contrôle qui fonctionne, je serais très heureux. Nous vous remercions à l'avance

$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++; 
} 

Répondre

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

Merci! Cette vérification a résolu mon problème :) –

+3

Laissez-moi suggérer un problème, essayer d'expliquer un peu le problème. Cela aide beaucoup. –

+0

Chose importante - cochez '$ media-> group-> vignette [0]' - vous devez cocher cet objet xml pour le vide. Si c'est vrai, alors sur toute tentative de résoudre '$ media-> group-> thumbnail [0] -> attributes()' vous pouvez obtenir cette erreur. – Enyby

8

méthodes de SimpleXML renvoient toujours des objets, qui sont eux-mêmes liés au document d'origine (certains thingy internes liés à libxml.) Si vous voulez stocker ces données pour une utilisation ultérieure, le jeter comme une chaîne , comme ceci:

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

Je reçois toujours la même erreur sur cette ligne: videoobj $ [$ i] [ 'url'] = (string) $ attrs [ 'url']; la coulée ne vous aide pas :( –