Основные дампы xmlReadFile () (C ++ Ubuntu) для поврежденного XML

Я использую библиотеки libxml2 для анализа XML, отправленного мне (моей программе), как файла из другой программы. С осторожностью это должно означать, что я никогда не получаю плохой XML, но уже дважды я делал ручные настройки, которые ломали XML в полученном файле. Под ломаным я подразумеваю, что элементы имеют ошибки, конечные теги не совпадают с начальными тегами, случайные символы между тегами и т. Д.

Файл небольшой, поэтому нет особых проблем с загрузкой памяти в анализатор, поэтому я использую xmlReadFile () для чтения в документе.

Моя проблема возникает, когда XML сломан. xmlReadFile () выполняет аварийное завершение и дамп памяти. Я не могу поймать это с исключением, и при этом установка флага, чтобы «восстановить» работу.

Я посмотрел на Google с минимальным успехом. Я нашел xmllint, но я действительно не хотел бы вызывать system () или popen () каждый раз, когда я получаю новый XML-файл. Я посмотрел на DTD, но не могу понять, как заставить DTD действительно проверять значение, переданное в. (Многие из тегов в документе имеют значения, которые являются одним из набора, скажем, 5 возможных ответов.) Конечно, если бы DTD работал, я бы по крайней мере не сломал xmlReadFile ().

Любые предложения о том, как проверить XML перед xmlReadFile () или с xmlReadFile () и как предотвратить сбои? Есть ли в xmllint интерфейс C ++, которого я просто не нашел?

Нет повышения. Нет меняющихся библиотек.

0

Решение

Ты пытался xmlReaderForFile(... XML_PARSE_RECOVER ...) ?

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector