xml文件解析

转载: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 
上一篇:dos 命令以及一些注意事项 2021.5.24


下一篇:Window 常用命令