我无法影响的服务器发送非常破碎的XML。
具体来说,Unicode WHITE STAR将被编码为UTF-8(E2 98 86),然后使用Latin-1到HTML实体表进行翻译。我得到的是â 98 86
(9个字节)在一个声明为utf-8而没有DTD的文件中。
我无法以不可逆转的方式配置W3C整洁。我只发现了如何让lxml静静地跳过它。 SAX使用Expat,遇到这种情况后无法恢复。出于速度原因,我想避免使用BeautifulSoup。
还有什么?
答案 0 :(得分:2)
BeautifulSoup
是你最好的选择。我建议在完全排除BeautifulSoup
之前进行分析。
答案 1 :(得分:0)
可能是这样的:
import htmlentitydefs as ents
from lxml import etree # or maybe 'html' , if the input is still more broken
def repl_ent(m):
return ents.entitydefs[m.group()[1:-1]]
goodxml = re.sub( '&\w+;', repl_ent, badxml )
etree.fromstring( goodxml )