c - XML - 当使用 SAX 而不是 DOC 时,libxml2 返回 XML_ERR_GT_REQUIRED
问题描述
我需要使用 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),但我无法解决这个问题。
有人请帮忙。
解决方案
推荐阅读
- python - 如何在 django html 中切片文本?
- xamarin - 如何记住选择器的选择,我使用 montemagno 的 xamarin.plugins.settings 并且我不知道如何获得正确的语法
- google-cloud-run - Cloud Scheduler 调用 Cloud Run 服务的身份验证
- node.js - 如何在单击按钮时生成校验和
- android - 错误:无法解决:com.android.support:appcompat-v7:29.0.0
- python - 为什么代码会打印两个答案,即使它们有不同的条件
- javascript - 对象的猫鼬模式数组
- android - 在单个 json 对象中将动态字段与普通字段一起改造
- java - 是否存在允许动态增长和扩展 java.nio.ByteBuffer 的 ByteBuffer 实现?
- python-3.x - ValueError 在意外情况下出现