2

私は次のコードを持っています:

$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要素が含まれる場合と含まれない場合があります。私がここで間違っていることを誰かが知っていますか?どんな助けでも大歓迎です!

4

1 に答える 1

4

is_object()->item()何があってもオブジェクトを返すので、これの良いテストではありません。getElementsByTagNameが返すDOMNodeListに実際に一致するアイテムがない場合は、DOMNodeにはなりません。

より良い方法は次のとおりです。

$images = $doc->getElementsByTagName('img');
if ($images->length > 0) {
   $imgnode = $images->item(0);
   $image = $imgnode->getAttribute('src');
   $imgnode->parentNode->removeChild($imgnode); 
} else {
   $image = '#';
}
于 2011-10-09T17:18:55.403 に答える