property_tree:用于应用程序的配置的数据处理,可以解析xml,json,ini,info等格式的数据
1. 解析XML文件
#include <boost/property_tree/ptree.hpp> // 加载property_tree组件
#include <boost/property_tree/xml_parser.hpp> // 加载XML解析组件
using namespace boost::property_tree; // 声明property_tree命名空间
ptree pt; // 声明ptree对象 pt
read_xml('file.xml', pt); // 解析xml配置文件
pt.get<string>('file.theme'); // 获取xml文件中 <theme>节点的字符串值,也可使用get_value()
pt.get<int>('file.clock_style'); // 获取xml文件中,<clock_style>节点的int值
pt.get('file.no_prop', 100); // 以缺省值的方法,获取xml文件中 <no_prop>节点的值,如果不存在返回 100
// 遍历具有多个子节点的节点,先用get_child()获取urls节点对象,然后使用forsearch的方法迭代访问
for (auto& x: pt.get_child("file.urls"))
{
x.second.data(); // 使用data获取各子节点(second是所有子节点的迭代称谓)的值,也可用get_value<>实现
}
pt.put('file.theme', 'new_string'); // 直接写入string信息,原信息被覆盖
pt.put('file.urls.url', 'new_url'); // 向多重子节点写入信息
pt.add('file.urls.url', 'new_url_02'); // 向多重子节点写入信息,此信息挂在新创建的一个子节点上,不会覆盖
write_xml(cout, pt); // 保存新的配置信息
2. 解析其他类型文件
json: <boost/property_tree/json_parser.happ> 使用read_json() 和 write_json() 读写配置
ini: 不支持多级层次性,只有key和value形式 <.../ ini_parser.hpp> 使用read_ini() 和 write_ini() 读写配置
info: <.../ info_parser.hpp> 使用read_info() 和 write_info() 读写配置