转载:https://www.cnblogs.com/jiangu66/p/3211956.html
解析对象del.xml如下:
<root>
<delfile>
<filenum> 35 </filenum>
<paths>
<path>
<pathname>/tmp/tmp0/</pathname>
<before_hours> 0 </before_hours>
</path>
<path>
<pathname>/tmp/tmp1/</pathname>
<before_hours> 1 </before_hours>
</path>
<path>
<pathname>/tmp/tmp2/</pathname>
<before_hours> 2 </before_hours>
</path>
<path>
<pathname>/tmp/tmp3/</pathname>
<before_hours> 3 </before_hours>
</path>
<path>
<pathname>/tmp/tmp4/</pathname>
<before_hours> 4 </before_hours>
</path>
</paths>
</delfile>
<backup>
<backuptime> 23:59 </backuptime>
</backup>
</root>
cpp代码如下:
/* del.cpp */
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/typeof/typeof.hpp>
#include <iostream>
using namespace std;
/* 相关的xml参考文件请参考del.conf */
void ReadConfig()
{
boost::property_tree::ptree pt; //定义一个存放xml的容器指针
boost::property_tree::read_xml("del.xml", pt); //读入目录下 del.conf文件 入口在pt这个指针
int filenum = pt.get<int>("root.delfile.filenum"); //将 xml文件中, root节点,下一层delfile 下一层的filenum 作为int类型取出,存在在filenum变量中。
cout << "filenum: " << filenum << endl;//不注释了 - -
BOOST_AUTO(child, pt.get_child("root.delfile.paths")); //BOOST_AUTO自动获取表达式, 这里定义个一个节点child指针,并将指针指向 root下一层的delfile的下一层的paths
for (BOOST_AUTO(pos, child.begin()); pos != child.end(); ++pos)//由于paths节点有多个节点,并且这些节点名称一样,可以用遍历的方法来获取他们,方法见左
{
BOOST_AUTO(child_paths, pos->second.get_child("")); //此处不需要填结点名,但引号不能省.这里是获取该节点下所有子节点的意思,子节点获取后放在child_path这个指针
for (BOOST_AUTO(pos_paths, child_paths.begin()); pos_paths != child_paths.end(); ++pos_paths)
cout << pos_paths->second.data() << endl;
}
}
int main()
{
ReadConfig();
return 0;
}
编译:
g++ -I/root/boost_1_75_0_build/include del.cpp
执行结果:
filenum: 35
/tmp/tmp0/
0
/tmp/tmp1/
1
/tmp/tmp2/
2
/tmp/tmp3/
3
/tmp/tmp4/
4