有没有办法在无效字符值上恢复iterparse?

2 投票
1 回答
1149 浏览
提问于 2025-04-17 16:15

我正在使用lxml的iterparse来解析一些很大的XML文件(3-5GB)。因为这些文件里有一些无效字符,所以会抛出lxml.etree.XMLSyntaxError错误。

当我使用lxml.etree.parse时,可以提供一个解析器,这样在遇到无效字符时可以自动修复:

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

有没有办法让iterparse也具备同样的功能呢?

补充:这里的编码不是问题。这些XML文件里有一些无效字符,可以通过定义一个XMLParser并设置recover=True来清理这些字符。因为我需要使用iterparse,所以不能使用自定义解析器。因此,我在这里寻找我上面代码片段中提供的功能:

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

1 个回答

0

当你提到无效字符时,是指unicode字符吗?如果是的话,你可以试试

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

如果你指的是格式不正确的XML,那这个方法显然就不管用了。如果你能把错误追踪信息发出来,我们就能了解XMLSyntaxError的具体情况,这样能提供更多的信息。

撰写回答