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

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

create and stream large XML document in C++

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


好的,原来 libxml2 有一个流式 API:

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

这是一种有点旧的风格(非常 C-ish),但你可以围绕它编写你的package器。


我会推荐 GenX 作为流式 XML 编写器,我在 Programmer's Notepad 中使用它,它很有效,您可以在源代码中查看使用示例。速度极快,并且可以生成良好的 UTF-8 XML。使用时的内存使用量应大致保持不变。


生成有效的 XML 真的没有什么大不了的。您担心的转义是微不足道的。

这里有一个用于流式编写 XML 的库:https://code.google.com/p/xml-writer-cpp/ — 如果没有别的,它对教育目的很有用。


在关键字"C XML writer;"下查找XML 编写器将 XML 生成到文件中,而无需在内存中构建整个 DOM,因此他们根本不需要使用太多内存。您没有提到平台,但 Microsoft XmlLite 有 IXmlWriter。


推荐阅读