Этот учебник использует XML. Обратите внимание, что библиотека не привязана к XML, и вместо нее можно использовать любой другой поддерживаемый формат (например, INI или JSON). XML был выбран потому, что автор считает, что с ним знаком широкий круг людей.
Предположим, что мы пишем систему журналирования для какого-либо приложения и должны прочитать конфигурацию журнала из файла, когда программа запускается. Файл с конфигурацией журнала выглядит так:
<debug>
    <filename>debug.log</filename>
    <modules>
        <module>Finance</module>
        <module>Admin</module>
        <module>HR</module>
    </modules>
    <level>2</level>
</debug>
Он содержит имя файла журнала, список модулей, в которых включена регистрация, и значение уровня отладки.
Во-первых, нам нужны некоторые из них:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/foreach.hpp>
#include <string>
#include <set>
#include <exception>
#include <iostream>
namespace pt = boost::property_tree;
Для сохранения конфигурации журнала в программе мы создаем структуру debug_settings:
struct debug_settings
{
    std::string m_file;               
    int m_level;                      
    std::set<std::string> m_modules;  
    void load(const std::string &filename);
    void save(const std::string &filename);
};
Все, что нужно сделать сейчас, это записать реализации функций загрузки () и сохранения (). Давайте сначала разберемся с нагрузкой(). Он содержит всего 7 строк кода, хотя он делает все необходимые вещи, включая отчет об ошибках:
void debug_settings::load(const std::string &filename)
{
    
    pt::ptree tree;
    
    pt::read_xml(filename, tree);
    
    
    m_file = tree.get<std::string>("debug.filename");
    
    
    m_level = tree.get("debug.level", 0);
    
    
    
    BOOST_FOREACH(pt::ptree::value_type &v, tree.get_child("debug.modules")) {
        
        m_modules.insert(v.second.data());
    }
}
Теперь функция сохранения(). Это также 7 строк кода:
void debug_settings::save(const std::string &filename)
{
    
    pt::ptree tree;
    
    
    
    tree.put("debug.filename", m_file);
    tree.put("debug.level", m_level);
    
    
    
    BOOST_FOREACH(const std::string &name, m_modules)
        tree.add("debug.modules.module", name);
    
    pt::write_xml(filename, tree);
}
Полная программаdebug_settings.cppвключен в каталог примеров.