2013-02-18 97 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

相關問題