2011-10-09 92 views
2

我有以下代碼:removeChild之用PHP DOM不起作用

$doc = new DOMDocument(); 
$doc->loadHTML($quiz['value']); 
$imageElement = $doc->getElementsByTagName('img')->item(0); 
} 
if(is_object($imageElement)){ 
    $image = $imageElement->getAttribute('src'); 
    $imageElement->parentNode->removeChild($imageElement); 
}else{ 
    $image = '#'; 
} 
$quiz['value'] = $doc->saveHTML(); 

不過,我得到以下錯誤:致命錯誤:調用非對象的成員函數removeChild之()。

加載的dom字符串可能包含或不包含img元素。 有人知道我在這裏做錯了嗎?任何幫助是極大的讚賞!

+0

井,該錯誤消息是顯而易見的。你的'$ imageElement-> parentNode'不是一個對象。確保它是和錯誤將消失。 – Gordon

回答

3

is_object()不是一個很好的測試,因爲->item()會返回一個對象,不管是什麼。如果DOMNodeList中沒有getElementsByTagName返回的實際匹配項,它將不會是DOMNode。

一種較好的方法是:

$images = $doc->getElementsByTagName('img'); 
if ($images->length > 0) { 
    $imgnode = $images->item(0); 
    $image = $imgnode->getAttribute('src'); 
    $imgnode->parentNode->removeChild($imgnode); 
} else { 
    $image = '#'; 
} 
+0

[來自返回值DOMNodeList :: item()上的手冊:](http://docs.php.net/manual/en/domnodelist.item.php)* DOMNodeList中indexth位置的節點,如果這不是有效的索引,則爲NULL * - 另請參閱http://codepad.viper-7.com/gaXVsf – Gordon

+0

謝謝!這就像一個魅力! – rbnvrw