2009-10-09 95 views
2

我通过快速Google搜索看到了一些图书馆。什么是C++最常用的XML实现?什么是最常用的C++ XML库?

我打算使用XML作为程序配置的一种手段。我喜欢XML,因为我会利用它的树状结构。如果您认为自己有更适合的解决方案,请随时提及。我想要一些轻巧简单的东西。也许XML太多了?

编辑:跨平台将是可取的,但回答一个问题,我正在Linux编程。

+0

你打算使用哪个操作系统平台? // Buzzz – Buzzzz

+0

的Linux,但跨平台将是可取的。 – Scott

+0

这确实不应该的问题,除非你打算推荐AsmXML:http://mkerbiquet.free.fr/asm-xml/ –

回答

2

我会建议不要使用XML。

我知道这是一个意见问题,但XML确实混淆了大量标签的信息。而且,即使它是人类可读的,但混乱实际上阻碍了可读性(我从经验中说,因为我们目前有大约134个XML配置文件......)。此外,由于属性和纯文本之间的混合,阅读起来相当困难。你永远不知道你会需要哪一个。

我会推荐使用JSON,如果你想要一种已经有明确定义的解析器的语言。

对于解析,只需简单查看json.org并且您有一长串C++库。

+0

使用或不使用xml很大程度上取决于应用程序而不是程序员的味道。 – lsalamon

+0

如果作者想知道关于**你的**问题的答案(我应该使用XML吗?),他会问这个问题,而不是他问的问题。 -1 –

+0

Piotr,其实我确实留下了这个问题的答案。再读一遍。 :) – Scott

3

有几个在那里:

Xercers Big http://xerces.apache.org/xerces-c/ 
expat  small http://expat.sourceforge.net/ 

我喜欢外籍人士。但这完全是个人意见。
我使用它,因为它很小,编写C++包装器很简单。

Xerces就像全面的XML解析器,所有的旋钮都有一个哨子。 但是因此使用起来稍微复杂一些。

+0

可以expat写入XML文件吗? – Scott

+0

Expat纯粹是一个解析器 - 它读取输入并为特定类型的语法(元素,属性等)调用回调函数。您注册了您感兴趣的事件的回调。它与SAX类似,但不遵循SAX约定。没有输出支持,但输出无论如何是一个更简单的工作 - 尽管有明显的字符集/编码问题。 – Steve314

7

看看TinyXML的帮助你

TinyXML是一个简单的,小的,C++ XML解析器可以很容易地集成到其他程序。

+0

还有一个更加C++友好的版本,TiCPP。 http://code.google.com/p/ticpp/ – Rob

+0

在选择TinyXML之前,请查看http://pugixml.org/benchmark.html。我会选择一个轻量级C++ XML处理库 [pugixml](http://pugixml.org/)。 该库非常便携,易于集成和使用! – sg7

1

不是你问的问题,但有两种主要的XML解析器,SAX和DOM。

SAX解析器是事件驱动的解析器。当解析器通过XML文档(节点,属性等)查看各种元素时,解析器将调用您已定义的某个函数或方法。

另一方面,DOM解析器解析整个XML文档并返回一个代表整个文档的树结构。然后,您的代码可以按照它看到的任何顺序戳穿结构。

SAX解析器的内存效率更高,因为它们不需要在内存中表示整个文档。 DOM解析器更容易处理,因为您不限于以线性方式处理文档。

+0

值得注意的是 - Expat在这个方案中像SAX一样,但不是SAX。 SAX最初是一个Java库,但它的API成为了一种多语言标准的模型。 Expat总是C,并且(我认为)早于SAX。 – Steve314

0

我高度推荐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

0

我已经使用,并仍在使用的XML库是:

如果你不需要使用XML,那么我会建议没有这样做。

我也将避免造型你正在读/写为C++类,除非你正在使用一个代码生成什么。

我也想看看使用“的架构代码”产生用于读/写,但要确保许可证适合你在做什么。