gpt4 book ai didi

c++ - 为具有内存限制的大 XML 优化的 XML 库

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:14 25 4
gpt4 key购买 nike

我需要处理大型 XML 文件,但我想对其进行相对较小的更改。我还希望程序遵守严格的内存限制。我们绝不能使用超过 300Mb 的内存。

是否有一个库允许我将所有 DOM 保存在内存中,并在我遍历 DOM 时随时解析 XML?

我知道您可以使用基于回调的方法来做到这一点,但我不希望那样。我想吃我的蛋糕。我想使用 DOM API,但要延迟解析每个元素,这样使用 DOM API 的现有代码就不必更改。

对于这个问题,我想到了两种可能的方法:

  1. 解析惰性 XML,每次调用 getChildren() 都会解析下一段 XML。
  2. 解析整个 XML 树,但将您现在不使用的内容缓存在磁盘上。

其中两种方法是可以接受的,是否有现成的解决方案。

我正在寻找本地解决方案,但我对了解其他语言的库很感兴趣。

最佳答案

听起来你想要的是类似于 Streaming API for XML (StAX) 的东西.

虽然它不使用标准的 DOM API,但它在原则上类似于您的“getChildren()”方法。它没有 DOM 方法的内存开销,也没有回调 (SAX) 方法的复杂性。

Wikipedia page for StAX 上链接了许多实现。其中大部分用于 Java,但也有一些用于 C++ - Ambiera irrXMLLlamagraphics LlamaXML .


编辑:既然你提到了文档的“小改动”,如果你不需要将文档内容用于其他任何事情,你也可以考虑 Streaming Transformations for XML (STX) (在 this XML.com introduction to STX 中描述)。 STX 之于 XSLT 就像 SAX/StAX 之于 DOM。

关于c++ - 为具有内存限制的大 XML 优化的 XML 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7219434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com