2010-03-23 40 views
15

Tôi đang cố lấy dữ liệu video từ nguồn cấp dữ liệu danh sách phát youtube này và thêm dữ liệu thú vị vào mảng và sử dụng sau này, nhưng như bạn có thể thấy từ nguồn cấp dữ liệu, một số videolinks là " đã chết "và điều đó dẫn đến sự cố cho mã của tôi.SimpleXML - "Nút không còn tồn tại"

Lỗi tôi nhận được là "Nút không còn tồn tại" khi tôi cố truy cập $ attrs ['url']. Tôi đã cố gắng hàng giờ để tìm cách kiểm tra xem nút có tồn tại trước khi tôi truy cập vào nó hay không nhưng tôi không có may mắn.

Nếu có ai có thể giúp tôi phân tích cú pháp nguồn cấp dữ liệu theo cách khác với kết quả tương tự hoặc tạo kiểm tra if-node-tồn tại, tôi sẽ hạnh phúc nhất. Cảm ơn bạn trước

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

Trả lời

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

Cảm ơn! Kiểm tra đã giải quyết được vấn đề của tôi :) –

+3

Để tôi đề xuất một vấn đề, hãy cố gắng giải thích một chút về vấn đề này. Điều này giúp ích rất nhiều. –

+0

Điều quan trọng - kiểm tra '$ media-> group-> thumbnail [0]' - bạn cần kiểm tra đối tượng xml này để trống. Nếu đó là sự thật thì khi cố gắng giải quyết '$ media-> group-> thumbnail [0] -> attributes()' bạn có thể gặp lỗi này. – Enyby

8

phương pháp SimpleXML luôn trở về đối tượng, được tự liên kết với tài liệu gốc (một số thingy nội bộ liên quan đến libxml.) Nếu bạn muốn lưu trữ dữ liệu để sử dụng sau, đúc nó như là một chuỗi , như thế này:

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

tôi vẫn nhận được lỗi tương tự trên dòng này: $ videoobj [$ i] [ 'url'] = (string) $ attrs [ 'url']; quá trình truyền không giúp được: ( –

Các vấn đề liên quan