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.