boost::xml_parser 读取xml

本文介绍了如何使用Boost库中的xml_parser模块解析XML文件,并详细解释了如何从XML中提取特定节点的数据,包括id、name和accout属性。通过实例展示了如何遍历XML节点并处理属性信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

boost::xml_parser 处理xml
---------debug_settings.xml--------
<root>
  <strage name="asd" alias="13" classId="13.22">r
    <id>12</id>  
    <name>"jack"</name>  
    <accout>"0001"</accout>
  </strage>
 <strage name="abbasd" alias="14" classId="14.22">abb
    <id >13</id>  
    <name>"toni"</name>  
    <accout>"0002"</accout>
  </strage>
 <strage name="assasd" alias="15" classId="15.44">ass
    <id >14</id>  
    <name>"hate"</name>  
    <accout>"0003"</accout>
  </strage>
</root>

--------main.cpp--------
#include <boost/property_tree/ptree.hpp>

#include <boost/property_tree/xml_parser.hpp>

#include <boost/algorithm/string.hpp>

#include <boost/foreach.hpp>

#include <string>

#include <set>

#include <vector>

#include <exception>

#include <iostream>

 

using namespace std;

 

static const string str_node_name[] = {"id","name","accout"};

 

struct xmlStageDetail

{

    string id;

    string name;

    string accout;

};

 

int load(const char* filename,vector<xmlStageDetail>*m_xml_detail)

{

    xmlStageDetail xml_stage_detail;

    using boost::property_tree::ptree;

    ptree pt;

    ptree root;

    try

    {

        read_xml(filename, pt);

        cout << "获取数据" << pt.data()<< endl;

        root = pt.get_child("root");

    }

    catch (std::exception& e)

    {

        std::cout << "Error: " << e.what() << endl;

        return -1;

    }

 

    cout << "root的长度:" << root.size() << endl;

    int ita = pt.get<int>("root.strage.id");

    string cattr = pt.get<string>("root.strage.<xmlattr>.name");

    cout << "root.strage.id:" << ita << "\troot.strage.<xmlattr>.name:" << cattr << endl;

 

    for (ptree::iterator itr = root.begin();itr!=root.end();itr++)

    {

        ptree strage = itr->second;

       

        string ssv = strage.data();

        string sattr = strage.get<string>("<xmlattr>.name");

        int iattr = strage.get<int>("<xmlattr>.alias");

        float fattr = strage.get<float>("<xmlattr>.classId");

        boost::trim<string>(ssv); // 去除首尾空格

        cout << ssv << "[\tname:" << sattr << "\talias:" << iattr<< "\tclassid:" << fattr << endl;

        for (int i = 0;i<3;i++)

        {

            ptree pt;

            string str_value;

            try

            {

                pt = strage.get_child(str_node_name[i]);

                str_value = pt.data();

                cout << str_value << endl;

            }

            catch (std::exception& e)

            {

                cout<< str_value <<"解析错误:" << e.what() << endl;

                return -1;

            }

            switch (i)

            {

            case 0:

                xml_stage_detail.id = str_value;

                break;

            case 1:

                xml_stage_detail.name = str_value;

 

                break;

            case 2:

                xml_stage_detail.accout = str_value;

 

                break;

            }

 

        }

        m_xml_detail->push_back(xml_stage_detail);

    }

    return 0;

 

}

 

 

int main()

{

    vector<xmlStageDetail>m_xml_detail;

    try

    {

        load("debug_settings.xml",&m_xml_detail);

        std::cout << "Success\n";

    }

    catch (std::exception &e)

    {

        std::cout << "Error: " << e.what() << endl;

        return -1;

    }

    return 0;

}
运行结果如下:



boost::property_tree::read_xml(strTmp, pt);加入这个严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误 LNK2019 无法解析的外部符号 "void __cdecl boost::throw_exception(class std::exception const &,struct boost::source_location const &)" (?throw_exception@boost@@YAXAEBVexception@std@@AEBUsource_location@1@@Z),函数 "void __cdecl boost::property_tree::xml_parser::read_xml<class boost::property_tree::basic_ptree<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class boost::property_tree::basic_ptree<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &,int,class std::locale const &)" (??$read_xml@V?$basic_ptree@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@property_tree@boost@@@xml_parser@property_tree@boost@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAV?$basic_ptree@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@12@HAEBVlocale@4@@Z) 中引用了该符号 D:\SAMA\sama\build\msvc-Debug\sama D:\SAMA\sama\build\msvc-Debug\copidfunction.cpp.obj 1 错误 LNK1120 1 个无法解析的外部命令 D:\SAMA\sama\build\msvc-Debug\sama D:\SAMA\sama\out\MSVC-Debug\sama.exe 1
最新发布
03-30
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值