Мне нужно проанализировать огромные и большие данные XML размером более 400 КБ, используя libxml2.
Как я знаю, поскольку DOC не подходит для больших XML-данных, я пытаюсь использовать обработчик SAX и xmlParseChunk.
Но при анализе в середине xml-данных xmlParseChunk возвращает [73] XML_ERR_GT_REQUIRED.
Я пытался использовать xmlParserCtxtPtr с xmlCreatePushParserCtxt.
Я думал, что это вызвано огромными данными XML, поэтому я попробовал xmlCtxtUseOptions (ctxt, XML_PARSE_HUGE) до xmlParseChunk.
Я также использовал strlen (символы) вместо sizeof (символы), когда xmlParseChunk читает данные XML.
Но не удалось.
Благодаря cooldaemon @ GitHub (https://gist.github.com/cooldaemon/106870),
Я попробовал почти то же самое с его / ее кодом.
int read_xmlfile(FILE *f) {
char chars[1024];
int res = fread(chars, 1, 4, f);
if (res <= 0) {
return 1;
}
xmlSAXHandler SAXHander = make_sax_handler();
xmlParserCtxtPtr ctxt = xmlCreatePushParserCtxt(
&SAXHander, NULL, chars, res, NULL
);
while ((res = fread(chars, 1, sizeof(chars), f)) > 0) {
if(xmlParseChunk(ctxt, chars, res, 0)) {
xmlParserError(ctxt, "xmlParseChunk");
return 1;
}
}
xmlParseChunk(ctxt, chars, 0, 1);
xmlFreeParserCtxt(ctxt);
xmlCleanupParser();
return 0;
}
Обычно он анализирует данные XML размером менее 400 КБ.
Я подозреваю, что xmlParseChunk или что-то выдает ошибку «XML_ERR_GT_REQUIRED» из-за данных XML размером более 400 КБ.
Несмотря на использование xmlCtxtUseOptions (..., XML_PARSE_HUGE), я не могу решить эту проблему.
Кто-то, пожалуйста, помогите.