有没有什么好的方法(也是一个简单的方法)使用Boost来读写XML文件?
我似乎找不到任何使用 Boost 读取 XML 文件的简单示例。您能给我指一个使用 Boost 读写 XML 文件的简单示例吗?
如果不是 Boost,有什么好的、简单的库可以推荐来读写 XML 文件吗? (它必须是一个C++库)
你应该试试pugixml 用于 C++ 的轻量级、简单且快速的 XML 解析器
pugixml 最好的一点是XPath支持,这是 TinyXML 和 RapidXML 所缺乏的。
引用 RapidXML 的作者的话“我要感谢 Arseny Kapoulkine 在 pugixml 上所做的工作,这是这个项目的灵感”和“比 pugixml 快 5% - 30%,我所知道的最快的 XML 解析器”他已经针对版本 0.3 进行了测试pugixml 的最新版本已达到 0.42。
以下是 pugixml 文档的摘录:
主要特点是:
- 低内存消耗和碎片(战胜 pugxml 约为 1.3 倍,TinyXML - 约为 2.5 倍,Xerces (DOM) - 约为 4.3 倍 1)。确切的数字可以在与现有解析器的比较部分中看到。
- 极高的解析速度(战胜 pugxml 约为 6 倍,TinyXML - 〜10 倍,Xerces-DOM - 〜17.6 倍 1
- 极高的解析速度(好吧,我重复一遍,但它太快了,在测试 XML 上它的性能比 Expat 快 2.8 倍)2
- 或多或少符合标准(它将正确解析任何符合标准的文件,但 DTD 相关问题除外)
- 几乎不会出现错误(它不会像你和我这样的东西窒息,就像外籍人士那样;它会解析带有错误编码的数据的文件;等等)
- 干净的界面(经过大量重构的 pugxml 的界面)
- 或多或少支持 Unicode(实际上,它假定输入数据采用 UTF-8 编码,尽管它很容易与 ANSI 一起工作 - 目前没有 UTF-16(请参阅未来的工作),并具有辅助转换函数 (UTF-8 UTF-16/32(无论 std::wstring 和 wchar_t 的默认值是什么))
- 完全符合标准的 C++ 代码(经 Comeau 严格模式批准);该库是多平台的(请参阅平台列表参考)
- 高灵活性。您可以通过解析选项控制文件解析和 DOM 树构建的许多方面。
好吧,你可能会问 - 有什么问题吗?一切都那么可爱 - 它是用于解析 XML 的小型、快速、强大、干净的解决方案。缺什么?好吧,我们是公平的开发者 - 所以这里有一个错误列表:
- 内存消耗。它击败了我所知道的所有基于 DOM 的解析器——但是当 SAX 解析器出现时,就没有机会了。您无法使用少于 4 Gb 的内存来处理 2 Gb XML 文件 - 而且速度很快。尽管 pugixml 比所有其他基于 DOM 的解析器表现得更好,所以如果您坚持使用 DOM,这不是问题。
- 内存消耗。好吧,我重复一遍。再次。当其他解析器允许您在常量存储(甚至作为内存映射区域)中提供 XML 文件时,pugixml 不会。因此,您必须将整个数据复制到非常量存储中。此外,它应该在解析器的生命周期内持续存在(其原因以及有关生命周期的更多信息如下)。再说一遍,如果您对 DOM 没问题 - 这应该不是问题,因为总体内存消耗较少(好吧,尽管您需要一块连续的内存,这可能是一个问题)。
- 缺乏验证、DTD 处理、XML 命名空间、编码的正确处理。如果您需要这些,请使用 MSXML 或 XercesC 或类似的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)