如何在Python中解析破碎的XML?

时间:2010-08-26 17:18:13

标签: python xml

我无法影响的服务器发送非常破碎的XML。

具体来说,Unicode WHITE STAR将被编码为UTF-8(E2 98 86),然后使用Latin-1到HTML实体表进行翻译。我得到的是â 98 86(9个字节)在一个声明为utf-8而没有DTD的文件中。

我无法以不可逆转的方式配置W3C整洁。我只发现了如何让lxml静静地跳过它。 SAX使用Expat,遇到这种情况后无法恢复。出于速度原因,我想避免使用BeautifulSoup。

还有什么?

2 个答案:

答案 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 )