XML - libxml2 возвращает XML_ERR_GT_REQUIRED при использовании SAX, а не DOC - PullRequest
1 голос
/ 25 апреля 2019

Мне нужно проанализировать огромные и большие данные 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), я не могу решить эту проблему.

Кто-то, пожалуйста, помогите.

...