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