Removing a nodes in a loop over a dom structure can break the iterator so
foreach ($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.