2

lxml を使用してiterparse、いくつかの大きな XML ファイル (3 ~ 5Gig) を解析しています。これらのファイルの一部には無効な文字が含まれているため、 alxml.etree.XMLSyntaxErrorがスローされます。

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
4

1 に答える 1

0

無効な文字とは、Unicode文字を意味しますか?もしそうなら、あなたは試すことができます

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

不正な形式のXMLを意味する場合、これは明らかに機能しません。トレースバックを投稿できれば、XMLSyntaxErrorより多くの情報を提供する性質を確認できます。

于 2013-02-18T12:46:22.410 に答える