Как решить `` возвращенный нуль '' при разборе огромной XML-страницы с помощью C

Я пытаюсь разобрать огромные данные XML clob из Oracle DB в Redhat linux 5.5, 64bit, используя libxml2-2.7.6

Но когда я попытался проанализировать XML размером более 400 КБ (409600 байт), функция синтаксического анализатора xml xmlParseMemory вернула нулевой указатель.

(Успешно загрузить данные из XML clob в строку в C, проверено, что строка sData правильно заполнена данными.)

xmlDocPtr xDoc;
...
xDoc = xmlParseMemory(sData, strlen(sData));
if(xDoc == NULL)    return -1;
...

Парсер работает, когда размер XML меньше 400 КБ. Но только когда размер больше 400 КБ, paser возвращает нулевой указатель, несмотря на правильные строковые данные sData.

И я уже пробовал xmlReadDoc, xmlReadMemory с использованием xmlMemSetup перед xmlInitParser.

Как я могу решить эту ситуацию с помощью функций синтаксического анализатора xml?


person Port89    schedule 09.04.2019    source источник


Ответы (1)


Если все работает для XML с размером менее 400 КБ, я считаю, что проблема в вашем sData буфере. Вы должны проверить, достаточно ли в буфере места для большого файла (более 400 КБ):

  • Сколько памяти вы выделили для sData?
  • Действителен ли strlen(sData)?
person Quy Phan    schedule 09.04.2019
comment
К сожалению, да, sData был динамически выделен с помощью calloc. Ему выделяется длина CLOB. И strlen(sData) также верно показывает правильную длину sData, когда я ее регистрирую. - person Port89; 10.04.2019
comment
Оценил !! Это вызвано неполным sData выделенным в памяти. Один из тегов ошибочно занесен в память :) - person Port89; 02.05.2019
comment
Приятно слышать, что вы решили проблему. Хорошего дня! - person Quy Phan; 02.05.2019