Как на Python распарсить большой XML файл (>500Мб) содержаший ошибки?

Условия

1) Есть большой XML файл. Соотвественно заргужать его весь в память не подходит.

2) Файл содржит ошибки, напрмер внутри тегов может быть неэкранированные html теги, не закрытые.

lxml и sax умеетю парсить постепенно читая файл, но валятся на незакрытых тегах внутри нужных нам тегов

BeautifulSoup не валиться на незакрытых тегах, но похоже что он загружает весь файл в память сразу же.


Есть ли готовые решения подходящие под данные условия?
  • Вопрос задан
  • 6525 просмотров
Пригласить эксперта
Ответы на вопрос 3
@egorinsk
Если файл XML содержит ошибки, то это уже не файл XML.
Ответ написан
Комментировать
DmZ
@DmZ
lxml в варианте «распарсить любой ценой» тоже не проходит?

parser = etree.XMLParser(recover=True, huge_tree=True)

В этом режиме он будет пытаться обойти незакрытые теги и невалидный XML на сколько у него хватит ума.
Ответ написан
@skomoroh
можно сначала представить что xml — это обычный текстовый и файл и привести структуру тегов в порядок функциями работы со строками, а уже потом открывать его как xml

например можно заменить все html теги на «нетеги»
sed -e 's/<p/\& lt;p/g' -e 's/<\/p/\& lt;\/p/g' file.xml > new.xml

список всех html тегов гуглится

можно предварительно сравнить количество открывающих и закрывающих тегов
grep -o '<[^>]*>' file.xml |  cut -f 1 -d ' ' | sort | uniq -c
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы