XML-使用SAX而非DOC时,libxml2返回XML_ERR_GT_REQUIRED

时间:2019-04-25 02:09:26

标签: c parsing libxml2

我需要使用libxml2解析超过400KB的大型和大型xml数据。 据我所知,由于DOC不适合大量的xml数据,因此我尝试使用SAX处理程序和xmlParseChunk。

但是在xml数据的中间进行解析时,xmlParseChunk返回[73] XML_ERR_GT_REQUIRED。

我一直在尝试将xmlParserCtxtPtr与xmlCreatePushParserCtxt结合使用。 我认为这是由大量xml数据引起的,因此我在xmlParseChunk之前尝试了xmlCtxtUseOptions(ctxt,XML_PARSE_HUGE)。

当xmlParseChunk读取xml数据时,我还使用了strlen(chars)而不是sizeof(chars)。

但是失败了。

感谢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;
}

它通常解析小于400KB的xml数据。 我怀疑xmlParseChunk或由于xml数据超过400KB而引发错误“ XML_ERR_GT_REQUIRED”。

尽管使用xmlCtxtUseOptions(...,XML_PARSE_HUGE),但我无法解决此问题。

请有人帮忙。

0 个答案:

没有答案