代码之家  ›  专栏  ›  技术社区  ›  naumcho

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

  •  1
  • naumcho  · 技术社区  · 16 年前

    我有一些代码可以创建一个相当大的XML DOM并将其写到一个文件中(高达50-100MB)。它基本上创建了DOM,然后在其上调用ToString并用Ofstream将其写出。有没有一种方法可以获得生成的DOM的流输出,这样它就不会同时在内存中创建整个结构,然后复制它,等等?我不会在创建任何节点之后修改它,这样它就可以写出来并立即释放内存。我可以编写自己的XML类来进行XML构造,但是…我不认为这是个好主意,因为我可能会错过一些东西,当它下来逃跑等。

    4 回复  |  直到 10 年前
        1
  •  3
  •   naumcho    16 年前

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

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

    它有点旧(非常C-ish),但是你可以用包装纸来包装它。

        2
  •  1
  •   Simon Steele    16 年前

    我建议你 GenX 作为流式XML编写器,我在 Programmer's Notepad 它是一种处理方法,您可以在源代码中看到使用示例。速度非常快,它产生了良好的UTF-8XML。使用时的内存使用量应该保持大致不变。

        3
  •  0
  •   Ben Bryant    16 年前

    在关键字“C++XML编写器”下,XML编写器将XML生成文件,而不必在内存中构建整个DOM,因此它们根本不需要使用太多内存。你没有提到平台,但是微软的xmllite有ixmlwriter。

        4
  •  0
  •   Václav Slavík    10 年前

    实际上,生成有效的XML并不需要太多;您所担心的转义是微不足道的。

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