Removing a nodes in a loop over a dom structure can break the iterator soforeach ($element->childNodes AS $child){ $child->remove();}isn't going to do what it looks like it should. The loop body will only run once regardless of how many children exist.