此应用程序在具有低处理能力和内存的嵌入式平台上运行。我想从应用程序中生成大量XML。目前我正在使用Xerces-C ++ 3.1.1构建DOM并序列化为XML。但是DOM构造需要很长时间并且消耗大量内存。
我知道与DOM相比,SAX是解析XML的轻量级方法。像那样有一种轻量级的方法来生成XML?当然,我可以通过连接字符串来生成XML,但我没有选择这种方法,因为我想确保生成格式良好的XML并清理其中包含的文本。
答案 0 :(得分:1)
您正在寻找的内容通常称为流式序列化,其中部分文档在可用时写出,而不是将它们全部堆积并在最后写出(这是DOM方法所需要的)。
Xerces-C ++目前没有流式序列化支持。但使用DOM模拟它并不是很困难。我们的想法是在一大块数据准备好被序列化时构建一个DOM文档片段,使用DOMWriter API将其写出来,并在完成后释放它。准备好另一个块后,重复上述步骤。结果是一个应用程序只使用了创建完整文档所需的一小部分内存。
我们在CodeSynthesis XSD(一种用于C ++的XML数据绑定工具包)中使用此方法,以便能够处理太大而无法容纳到内存中的XML文档。事实上,我们编写了一些辅助类来简化所有这些,你可以在examples / cxx / tree /目录中找到'streaming'示例的一部分(示例代码是公共域,所以随意借用它; - ))。