2011-04-10 28 views
5

在我开始通过自己的设置库进行书写之前,我会尝试查找现有的设置。我已经搜索了很多C#或MFC,但没有使用简单的C++/STL。我想的东西,允许通过按键,比如访问:用于以XML格式存储设置的C++库

mySettings["Root"]["Subsection"]["Value"].Value 

或者类似的规定。有没有什么能够为XML文件提供这种接口,或者我将不得不推出自己的?

感谢, Ĵ

+0

为什么选择XML? 你真的想让人们改变你的设置吗? 你必须解析所有的垃圾,然后验证它。 它需要从程序外部是人类可读的吗? 是否需要机器/架构独立。 创建一个包含所有配置的结构。 创建一个相同大小的文件,mmap文件并覆盖结构。 您现在拥有磁盘上结构的二进制副本。 添加文件锁定,您可以让多个进程共享配置。 坐回并赢利。 – Angelom 2011-04-10 10:42:36

+2

虽然XML并不完美,但它具有“正常工作”的优点,还有额外的好处,以便在稍后添加设置的情况下,与二进制格式相比,软件的较旧版本和较新版本都不会崩溃和刻录。 XML是人类可读的事实并不是缺点。你当然总是会有一些傻瓜在文本编辑器中破坏他的设置编辑设置,因为嘿,如果它是XML,那么你绝对必须手动编辑你的配置文件 - 但那是他们自己的问题,而不是你自己的问题。同样的人也可能尝试在十六进制编辑器中编辑二进制文件。 – Damon 2011-04-10 11:22:57

回答

7

有TinyXML的和pugixml

PugiXML确实有XPath支持

+0

+1为TinyXML。作为Code :: Blocks的配置后端,TinyXML在许多修订版中已经可靠工作了好几年。由于对输入数据的天真假设而导致的一些早期阶段失败,它从未给出过任何麻烦。 – Damon 2011-04-10 11:27:04

+0

+ 1 pugixml看起来很有趣 – Ralf 2011-04-10 14:19:28

+1

pugixml是完美的。我已经在几个小时内用它替换了现有的基于注册表的设置系统,它工作的很好! – JWood 2011-04-10 15:10:39

5

Boost property tree就是这样一个图书馆,虽然你必须要考虑是否要在提升带来只为这目的。它非常适用于简单的配置属性的例子所示,虽然我记得做更复杂的东西,我花了一点的时间来得到正确的:

下面的代码是从文件采取:

// Create an empty property tree object 
using boost::property_tree::ptree; 
ptree pt; 

// Load the XML file into the property tree. If reading fails 
// (cannot open file, parse error), an exception is thrown. 
read_xml(filename, pt); 

// Get the filename and store it in the m_file variable. 
// Note that we construct the path to the value by separating 
// the individual keys with dots. If dots appear in the keys, 
// a path type with a different separator can be used. 
// If the debug.filename key is not found, an exception is thrown. 
m_file = pt.get<std::string>("debug.filename"); 
+0

感谢您的建议,我只是有点不情愿为此任务提供助力,但最终pugixml做到了。 – JWood 2011-04-10 15:11:25

+0

@JWood:为什么?它只是一个头文件库。相当不错 – Inverse 2011-04-11 17:09:39

+0

@反过来 - 我已经看过提升之前,并推迟主要由其他部分提升每个部分依赖的数量。我可能在这里是不正确的,但似乎通常需要添加大量其他组件才能获得一个组件。诚然,这只是一个简短的一瞥,但我有Qt的愿景和大量额外的DLL需要添加。 – JWood 2011-04-13 13:39:38

0

所有有趣的答案。但是我必须强调,在C++提供自己的XML API之前,使用真正的XML配置文件,并且实现自己定制的XML Configuration类是最好的方法。今天我面临着同样的任务,这就是我将要使用的解决方案。因为您正在维护自己的XML模式,所以您可以黑白地看到配置设置。然后,您的XML配置类将被自定义为解析该架构,而不会使您的解决方案过多地带来过多的功能和复杂性。简单,简洁,实用/ =英国媒体报道。