Boost использует RapidXML , как описано в главе Анализатор XML страницы Как заполнить дерево свойств :
К сожалению, на момент написания этой статьи XML синтаксический анализатор отсутствует Boost *1019*.
Поэтому библиотека содержит быстрый и крошечный синтаксический анализатор RapidXML (в настоящее время
версия 1.13) для обеспечения поддержки парсинга XML. RapidXML не полностью поддерживает
стандарт XML; он не способен анализировать DTD и поэтому не может делать
полная замена сущности.
Пожалуйста, обратитесь к учебнику по XML .
Поскольку ОП хочет "простой способ использовать boost для чтения и записи XML-файлов" , ниже я приведу очень простой пример:
<main>
<owner>Matt</owner>
<cats>
<cat>Scarface Max</cat>
<cat>Moose</cat>
<cat>Snowball</cat>
<cat>Powerball</cat>
<cat>Miss Pudge</cat>
<cat>Needlenose</cat>
<cat>Sweety Pie</cat>
<cat>Peacey</cat>
<cat>Funnyface</cat>
</cats>
</main>
(имена кошек с на домашней странице Мэтта Махони )
Соответствующая структура в C ++:
struct Catowner
{
std::string owner;
std::set<std::string> cats;
};
read_xml()
использование:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
Catowner load(const std::string &file)
{
boost::property_tree::ptree pt;
read_xml(file, pt);
Catowner co;
co.owner = pt.get<std::string>("main.owner");
BOOST_FOREACH(
boost::property_tree::ptree::value_type &v,
pt.get_child("main.cats"))
co.cats.insert(v.second.data());
return co;
}
write_xml()
использование:
void save(const Catowner &co, const std::string &file)
{
boost::property_tree::ptree pt;
pt.put("main.owner", co.owner);
BOOST_FOREACH(
const std::string &name, co.cats)
pt.add("main.cats.cat", name);
write_xml(file, pt);
}