如何使用libxml2的SAX接口来解析流式xml文件?

时间:2016-01-25 04:35:19

标签: c++ xml libxml2

我需要从服务器解析大的xml文件。我们目前使用流来读取这些文件,如下所示:

class stream
{
    size_t getSize();
    size_t read(void* buf, size_t offset, size_t size);
}

但我可以找到两个接口:

XMLPUBFUN int XMLCALL
        xmlSAXUserParseFile (xmlSAXHandlerPtr sax,
                     void *user_data,
                     const char *filename);
XMLPUBFUN int XMLCALL
        xmlSAXUserParseMemory   (xmlSAXHandlerPtr sax,
                     void *user_data,
                     const char *buffer,
                     int size);

我该如何解决这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

使用libxml2的push parser interface。通过调用xmlCreatePushParserCtxt初始化解析器。然后从服务器读取您的数据并与xmlParseChunk一起处理。这将调用SAX回调。最后,使用xmlFreeParserCtxt释放解析器上下文。