Рассмотрите возможность использования xml.sax
.Когда я представляю действительно искаженный XML, в котором может быть множество разных проблем, попробуйте разделить проблему на маленькие кусочки.
Вы упомянули, что у вас очень большой XML-файл, и, вероятно, в нем много записей, которые вы обрабатываете.серийно.И каждая запись (например, <item>...</item>
имеет начальный и конечный тег, предположительно - это будут ваши точки восстановления.
В xml.sax
вы предоставляете считыватель, обработчик и источники ввода . В худшем случае отдельные записи будут невозможно восстановить с помощью этого метода. Это немного больше настроек, но, вероятно, лучшее, что вы можете сделать, - это постепенно разбирать искаженный фид записи во время регистрации неверных записей.
В журналах убедитесь, что вы предоставили себе достаточно информации для восстановления исходной записи, чтобы вы могли добавить дополнительный код восстановления для всех случаев, которые вам, без сомнения, придется обрабатывать (например, создать badrecords_ today's date
.xml, чтобы вы могли выполнить повторную обработку вручную).
Удачи.