2013-02-18 96 views
1

我使用lxml的iterparse来解析一些大的XML文件(3-5Gig)。由于其中一些文件具有无效字符,所以引发了lxml.etree.XMLSyntaxError有没有办法在无效的Char值上恢复iterparse?

当使用lxml.etree.parse我可以提供一个解析器恢复无效字符:

parser = lxml.etree.XMLParser(recover=True) 
root = lxml.etree.parse(open("myMalformed.xml, parser) 

有没有一种方式来获得iterparse相同的功能?

编辑: 编码在这里不是一个问题。这些XML文件中存在无效字符,可以通过定义带有recover = True的XMLParser来进行消毒。由于我需要为此使用iterparse,因此我无法使用自定义分析器。所以,我在找我的片断提供的功能,这在这里以上:

context = etree.iterparse(open("myMalformed.xml", events=('end',), tag="Foo") <-- cant recover 

回答

0

当你说无效字符,你的意思Unicode字符?如果是这样你可以尝试

lxml.etree.XMLParser(encoding='UTF-8', recover=True) 

如果你的意思是格式不正确的XML,那么这显然不会工作。如果你可以发布你的回溯,我们可以看到XMLSyntaxError的性质,它将提供更多信息。

+0

感谢您的回答。不,我的意思是我的XML中有无效的字节。这与unicode无关。我提供的片段运行时没有错误,但由于etree.parse将DOM加载到RAM中,因此不能用于非常大的文件。我正在寻找iterparse的相同功能。 – Jannis 2013-02-18 13:01:00

相关问题