Как решить 'вернул ноль' при разборе огромной страницы XML с C - PullRequest
0 голосов
/ 09 апреля 2019

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 09 апреля 2019

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

  • Сколько памяти выделено для sData?
  • Действителен ли strlen(sData)?
...