我需要使用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),但我无法解决此问题。
请有人帮忙。