我们的程序当前使用libxml2 DOM API(xmlReadFile)将整个文件加载到内存中。不幸的是,这会破坏大型文件,如the basic memory consumption of libxml2 DOM is about 4-5 times the base file size

当我不想将整个树存储在内存中时,libxml2似乎提供了两个用于读取XML的API:SAX2xmlReader

我还没有研究过API,但是我想知道哪种API在哪种情况下更可取?

注意:我要做的只是用XML文件中的数据填充某些C ++数据结构。这些反过来比(非常冗长的)XML定义要小得多。目前,使用xmlReadFile和DOM API,该过程将为20MB XML文件占用大约100MB内存。此类文件在内存中的C ++数据更像是5MB,因此我可以从1:4转到4:1,这已经很有帮助了。

最佳答案

我采用这种方法,如果处理稀疏(这里和那里仅需要一个元素),则xmlReader更好,如果需要处理所有元素,则SAX更好。虽然,关于是否要推送处理还是要让处理推送代码的意见可能会出现。

关于c++ - 大文件应该使用哪个libxml2 API?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15551141/

10-10 16:33
查看更多