boost::property_tree 基本用法

    最近在开发C++时需要解析和设置配置文件XML,用了boost::property_tree ,看了相关资料并做了一下小小的总结:

1.读取单个值

XML:

<root>
    <students>
        <name>zhang san</name>
        <age>23</age>
    </students>
</root>
C++代码:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <iostream>
using namespace std;
using namespace boost::property_tree;
int main()
{
	ptree pt;
	//open xml and read information to pt
	read_xml("conf.xml", pt);
	//直接利用点运算符进行读取
	string name = pt.get<string>("root.students.name");
	cout<<"name:"<<name<<endl;
	int age =pt.get<int>("root.students.age");
	cout<<"age:"<<age<<endl;
	return 0;
}

2.遍历孩子
XML:
<pre code_snippet_id="227288" snippet_file_name="blog_20140310_3_6696140" name="code" class="html" style="margin-top: 0px; margin-bottom: 10px; font-weight: bold; line-height: 24.05px; background-color: rgb(255, 255, 255);"><root>
    <students>
        <name>张三</name>
        <name>李四</name>
	<name>王二</name>
    </students>
</root>
C++源代码:

 
<pre code_snippet_id="227288" snippet_file_name="blog_20140310_4_1396223" name="code" class="cpp" style="margin-top: 0px; margin-bottom: 10px; font-weight: bold; line-height: 24.05px; background-color: rgb(255, 255, 255);">int main()
{
	ptree pt;
	read_xml("conf.xml", pt);
	//获取students孩子进行遍历
	auto child = pt.get_child("root.students");
	for (auto i = child.begin();i!=child.end();++i)
	{
		string name = i->second.get_value<string>();//注意使用i->second.get<string>()
		cout<<name<<endl;
	}	
	return 0;
}
3.遍历包含孩子的属性
 
XML:
<root>
  <students>
    
    <student>
      <student name="张三" age="22">first student</student>
    </student>
    
    <student>
      <student name="李四" age="23">second student</student>
    </student>


  </students>


</root>
C++源代码:

int main()
{
ptree pt;
read_xml("E:/UIMRIS/BRANCHES/uMR_MAIN/MAIN/Features/win32test/XMLFile1.xml", pt);


auto child = pt.get_child("root.students");
for (auto i = child.begin();i!=child.end();++i)
{
auto student = i ->second.get_child(""); //不需要节点号,但引号必须有
for (auto j = student.begin(); j!= student.end(); ++j)
{
string stu= j->second.get<string>("");
cout<<"student:"<<stu<<endl;
string  name = j->second.get<string>("<xmlattr>.name");
cout<<"name:"<<name<<endl;
string  age = j->second.get<string>("<xmlattr>.age");
cout<<"age:"<<age<<endl;
}
}


getchar();
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值