在C ++中创建和流式传输大型XML文档

时间:2020-03-05 18:49:32  来源:igfitidea点击:

我有一些代码可以创建一个相当大的xml DOM并将其写到文件中(最大50-100MB)。它基本上创建了DOM,然后在其上调用toString并将其与ofstream一起写出。有没有一种方法来获取所生成的dom的流输出,以便它不会一次在内存中创建整个结构,然后再进行复制等?创建节点后,我将不会修改任何节点,因此它可以将其写出并立即释放内存。我可以编写自己的xml类来进行xml构造,但是...我不认为这是个好主意,因为当涉及转义等问题时,我可能会错过一些东西。

解决方案

回答

我将GenX推荐为流XML编写器,我在程序员的记事本中使用了它,并且效果很好,我们可以在源代码中看到使用示例。速度极快,并且可以生成良好的UTF-8 XML。使用时的内存使用率应大致保持不变。

回答

好的,事实证明libxml2具有流API:

http://xmlsoft.org/examples/testWriter.c

这是一个有点旧的样式(非常C-ish),但是我们可以围绕它编写包装器。

回答

在关键字" C ++ XML writer"下查看; XML编写者无需在内存中构建整个DOM即可生成XML文件,因此他们根本不需要使用太多内存。我们没有提到平台,但是Microsoft XmlLite具有IXmlWriter。