Я использую библиотеки libxml2 для анализа XML, отправленного мне (моей программе), как файла из другой программы. С осторожностью это должно означать, что я никогда не получаю плохой XML, но уже дважды я делал ручные настройки, которые ломали XML в полученном файле. Под ломаным я подразумеваю, что элементы имеют ошибки, конечные теги не совпадают с начальными тегами, случайные символы между тегами и т. Д.
Файл небольшой, поэтому нет особых проблем с загрузкой памяти в анализатор, поэтому я использую xmlReadFile () для чтения в документе.
Моя проблема возникает, когда XML сломан. xmlReadFile () выполняет аварийное завершение и дамп памяти. Я не могу поймать это с исключением, и при этом установка флага, чтобы «восстановить» работу.
Я посмотрел на Google с минимальным успехом. Я нашел xmllint, но я действительно не хотел бы вызывать system () или popen () каждый раз, когда я получаю новый XML-файл. Я посмотрел на DTD, но не могу понять, как заставить DTD действительно проверять значение, переданное в. (Многие из тегов в документе имеют значения, которые являются одним из набора, скажем, 5 возможных ответов.) Конечно, если бы DTD работал, я бы по крайней мере не сломал xmlReadFile ().
Любые предложения о том, как проверить XML перед xmlReadFile () или с xmlReadFile () и как предотвратить сбои? Есть ли в xmllint интерфейс C ++, которого я просто не нашел?
Нет повышения. Нет меняющихся библиотек.
Ты пытался xmlReaderForFile(... XML_PARSE_RECOVER ...)
?
Других решений пока нет …