• boost::ptree;boost::xml_parser


    <?xml version="1.0" encoding="utf-8"?>
    <localinfo>
        <player_info>
            <userInfo account="1990wyb" isLastLogin="0" isSave="0"/>
        </player_info>
        <PopupMessages>
            <MSGID_NOUPDATE>无可用更新</MSGID_NOUPDATE>
        </PopupMessages>
    </localinfo>
    #include <cstdio>
    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <string>
    #include <set>
    #include <exception>
    #include <iostream>
    #include <boost/property_tree/ptree.hpp>
    #include <boost/property_tree/xml_parser.hpp>
    #include <boost/foreach.hpp>
    #include <boost/typeof/typeof.hpp>
    using namespace std;
    using namespace boost;
    namespace pt = boost::property_tree;
    
    int main()
    {
        pt::ptree tree;
    
        string m_file = "./ss.xml";
    
        try
        {
            //pt::read_xml(m_file, tree);
            //读取,去掉空格
            pt::read_xml(m_file, tree, boost::property_tree::xml_parser::trim_whitespace, std::locale());
    
            //1
            std::string strName = tree.get<std::string>("localinfo.PopupMessages.MSGID_NOUPDATE");
            cout << strName << endl;
    
            //2
            //自动推导类型
            BOOST_AUTO(child, tree.get_child("localinfo2"));//获取根节点的子节点
            BOOST_AUTO(pos, child.begin());
            for (; pos != child.end(); ++pos)//循环遍历
            {
                if ("player_info" == pos->first)//player_info
                {
                    cout << pos->first << endl;
                    BOOST_AUTO(nodes, pos->second.get_child(""));
                    BOOST_AUTO(node, nodes.begin());
                    for (; node != nodes.end(); ++node)
                    {
                        if ("<xmlattr>" == node->first) {}
                        else if ("<xmlcomment>" == node->first) {}
                        else
                        {
                            //3 节点属性的值,不存在, 返回默认值
                            cout << "		" << node->second.get<string>("<xmlattr>.account", "null") << endl;
                            cout << "		" << node->second.get<string>("<xmlattr>.isLastLogin", "0") << endl;
                            cout << "		" << node->second.get<string>("<xmlattr>.xxxx", "not exit") << endl;
                        }
                    }
                }
            }
        }
        catch (std::exception &e)
        {
            cout << "Error: " << e.what() << endl;
        }
    }
  • 相关阅读:
    「Baltic2015」Network
    noip模拟赛 蒜头君的排序
    noip模拟赛 蒜头君的兔子
    codevs2171 棋盘覆盖
    noip模拟赛 蒜头君的坐骑
    noip模拟赛 蒜头君的树
    noip模拟赛 蒜头君打地鼠
    noip模拟赛 密码
    noip模拟赛 轰炸
    noip模拟赛 毁灭
  • 原文地址:https://www.cnblogs.com/osbreak/p/14496104.html
Copyright © 2020-2023  润新知