我通过快速Google搜索看到了一些图书馆。什么是C++最常用的XML实现?什么是最常用的C++ XML库?
我打算使用XML作为程序配置的一种手段。我喜欢XML,因为我会利用它的树状结构。如果您认为自己有更适合的解决方案,请随时提及。我想要一些轻巧简单的东西。也许XML太多了?
编辑:跨平台将是可取的,但回答一个问题,我正在Linux编程。
我通过快速Google搜索看到了一些图书馆。什么是C++最常用的XML实现?什么是最常用的C++ XML库?
我打算使用XML作为程序配置的一种手段。我喜欢XML,因为我会利用它的树状结构。如果您认为自己有更适合的解决方案,请随时提及。我想要一些轻巧简单的东西。也许XML太多了?
编辑:跨平台将是可取的,但回答一个问题,我正在Linux编程。
我会建议不要使用XML。
我知道这是一个意见问题,但XML确实混淆了大量标签的信息。而且,即使它是人类可读的,但混乱实际上阻碍了可读性(我从经验中说,因为我们目前有大约134个XML配置文件......)。此外,由于属性和纯文本之间的混合,阅读起来相当困难。你永远不知道你会需要哪一个。
我会推荐使用JSON,如果你想要一种已经有明确定义的解析器的语言。
对于解析,只需简单查看json.org并且您有一长串C++库。
有几个在那里:
Xercers Big http://xerces.apache.org/xerces-c/
expat small http://expat.sourceforge.net/
我喜欢外籍人士。但这完全是个人意见。
我使用它,因为它很小,编写C++包装器很简单。
Xerces就像全面的XML解析器,所有的旋钮都有一个哨子。 但是因此使用起来稍微复杂一些。
不是你问的问题,但有两种主要的XML解析器,SAX和DOM。
SAX解析器是事件驱动的解析器。当解析器通过XML文档(节点,属性等)查看各种元素时,解析器将调用您已定义的某个函数或方法。
另一方面,DOM解析器解析整个XML文档并返回一个代表整个文档的树结构。然后,您的代码可以按照它看到的任何顺序戳穿结构。
SAX解析器的内存效率更高,因为它们不需要在内存中表示整个文档。 DOM解析器更容易处理,因为您不限于以线性方式处理文档。
值得注意的是 - Expat在这个方案中像SAX一样,但不是SAX。 SAX最初是一个Java库,但它的API成为了一种多语言标准的模型。 Expat总是C,并且(我认为)早于SAX。 – Steve314
我高度推荐pugixml
“pugixml是一个C++ XML处理库,它由具有丰富遍历/修改功能,它从一个XML构建DOM树极快XML解析器一个类似DOM的接口的文件/缓冲区,以及用于复杂数据驱动的树查询的XPath 1.0实现。完整的Unicode支持也可以,用不同的Unicode编码之间的统一接口变异和转化。”
我已经测试了几个XML解析器包括选择和在商业产品中使用pugixml之前的几个商业的。
pugixml不仅是速度最快(有时快几倍)的解析器,而且还有最成熟和友好的API,我强烈推荐它,它是非常稳定的产品!我从0.8版开始使用它,现在是1.7。
在此解析器的巨大的奖金是XPath 1.0中实现!对于任何更复杂的树阙XPath是上帝发送的功能!
具有丰富的穿越/修改功能类似DOM接口,以解决现实生活中的“重”的XML文件非常有用。
它是小而快的解析器。如果您不介意链接C++代码,那么对于iOS或Android应用程序来说,这是个不错的选择。
我也测试过TinyXML。它不仅速度较慢,而且对我的XML文件也有问题。
基准说出一大堆: http://pugixml.org/benchmark.html
我已经使用,并仍在使用的XML库是:
如果你不需要使用XML,那么我会建议没有这样做。
我也将避免造型你正在读/写为C++类,除非你正在使用一个代码生成什么。
我也想看看使用“的架构代码”产生用于读/写,但要确保许可证适合你在做什么。
你打算使用哪个操作系统平台? // Buzzz – Buzzzz
的Linux,但跨平台将是可取的。 – Scott
这确实不应该的问题,除非你打算推荐AsmXML:http://mkerbiquet.free.fr/asm-xml/ –