用于以XML格式存储设置的C++库
问题描述:
在我开始通过自己的设置库进行书写之前,我会尝试查找现有的设置。我已经搜索了很多C#或MFC,但没有使用简单的C++/STL。我想的东西,允许通过按键,比如访问:用于以XML格式存储设置的C++库
mySettings["Root"]["Subsection"]["Value"].Value
或者类似的规定。有没有什么能够为XML文件提供这种接口,或者我将不得不推出自己的?
感谢, Ĵ
答
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");
答
所有有趣的答案。但是我必须强调,在C++提供自己的XML API之前,使用真正的XML配置文件,并且实现自己定制的XML Configuration类是最好的方法。今天我面临着同样的任务,这就是我将要使用的解决方案。因为您正在维护自己的XML模式,所以您可以黑白地看到配置设置。然后,您的XML配置类将被自定义为解析该架构,而不会使您的解决方案过多地带来过多的功能和复杂性。简单,简洁,实用/ =英国媒体报道。
为什么选择XML? 你真的想让人们改变你的设置吗? 你必须解析所有的垃圾,然后验证它。 它需要从程序外部是人类可读的吗? 是否需要机器/架构独立。 创建一个包含所有配置的结构。 创建一个相同大小的文件,mmap文件并覆盖结构。 您现在拥有磁盘上结构的二进制副本。 添加文件锁定,您可以让多个进程共享配置。 坐回并赢利。 – Angelom 2011-04-10 10:42:36
虽然XML并不完美,但它具有“正常工作”的优点,还有额外的好处,以便在稍后添加设置的情况下,与二进制格式相比,软件的较旧版本和较新版本都不会崩溃和刻录。 XML是人类可读的事实并不是缺点。你当然总是会有一些傻瓜在文本编辑器中破坏他的设置编辑设置,因为嘿,如果它是XML,那么你绝对必须手动编辑你的配置文件 - 但那是他们自己的问题,而不是你自己的问题。同样的人也可能尝试在十六进制编辑器中编辑二进制文件。 – Damon 2011-04-10 11:22:57