当前位置: 移动技术网 > IT编程>网页制作>Html5 > boost::xml_parser 读取xml

boost::xml_parser 读取xml

2018年03月11日  | 移动技术网IT编程  | 我要评论

02996069,淳化阁帖,亿芭利

boost::xml_parser 处理xml
---------debug_settings.xml--------
[html] 
<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--------
[html] 
#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; 
 

运行结果如下:

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网