boost库的属性树读取xml文件_demo
前提你得有自己的boost库
#include <QApplication>
#include <QDebug>
#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;
void debug_settings::load(const std::string &filename)
{
pt::ptree tree;
pt::read_xml(filename, tree);
auto root=tree.get_child("school");
{
//一,
//该节点叫做tea,下面有个tea
auto a=root.get_child("tea.tea").data();
qDebug()<<"tea"<<QString::fromStdString(a);
}
{
//二,
//该节点叫做stu,下面有个stu1,stu2,stu3,演示遍历该节点
auto stu=root.get_child("stu");
for(auto it = stu.begin() ; it != stu.end() ; it++)
{
qDebug() << QString::fromStdString(it->first.data()) << QString::fromStdString(it->second.data());
}
//二,1
//该节点叫做stu,下面有个stu1,stu2,stu3,演示读节点单个内容
auto c=stu.get_child("stu1").data();
qDebug()<<"stu1"<<QString::fromStdString(c);
auto c22=stu.get_child("stu2").data();
qDebug()<<"stu2"<<QString::fromStdString(c22);
}
}
void debug_settings::save(const std::string &filename)
{
pt::ptree tree_root;
pt::ptree tea;
tea.add<int>("tea",66);
tree_root.add_child("school.tea",tea);
pt::ptree stu;
stu.add<int>("stu1",111);
stu.add<int>("stu2",111222);
stu.add<int>("stu3",111222);
stu.add<int>("stu4",111222);
tree_root.add_child("school.stu",stu);
pt::write_xml(filename, tree_root);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
try
{
debug_settings ds;
ds.save("debug_settings_out.xml");
ds.load("debug_settings_out.xml");
std::cout << "Success\n";
}
catch (std::exception &e)
{
std::cout << "Error: " << e.what() << "\n";
}
return a.exec();
}