import html.entities as ents
from lxml import etree

def repl_ent(m):
    return ents.entitydefs[m.group()[1:-1]]
goodxml = re.sub('&\\w+;', repl_ent, badxml)
etree.fromstring(goodxml)
Как разобрать сломанный XML в Python?