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. Кто-нибудь знает, что я делаю неправильно здесь? Любая помощь приветствуется!


person rbnvrw    schedule 09.10.2011    source источник
comment
ну, сообщение об ошибке очевидно. Ваш $imageElement->parentNode не является объектом. Убедитесь, что это так, и ошибка исчезнет.   -  person Gordon    schedule 09.10.2011


Ответы (1)


is_object() не является хорошим тестом для этого, так как ->item() вернет объект, несмотря ни на что. Это просто не будет DOMNode, если в DOMNodeList нет фактического соответствующего элемента, который возвращает getElementsByTagName.

Лучшим методом будет:

$images = $doc->getElementsByTagName('img');
if ($images->length > 0) {
   $imgnode = $images->item(0);
   $image = $imgnode->getAttribute('src');
   $imgnode->parentNode->removeChild($imgnode); 
} else {
   $image = '#';
}
person Marc B    schedule 09.10.2011
comment
Из руководства DOMNodeList::item() по возвращаемым значениям: Узел в позиции index в DOMNodeList или NULL, если это неверный индекс — см. также codepad.viper-7.com/gaXVsf - person Gordon; 09.10.2011