zoukankan      html  css  js  c++  java
  • boost::xml————又一次失败的尝试

    尝试使用wptree来进行xml解析,又一次失败了,可以正常读取正常输出,但是使用wptree进行节点读取失败(乱码)

    请看源码:

    DealXml.h

     1 #pragma once
     2 
     3 #include <string>
     4 
     5 #include <boost/property_tree/ptree.hpp>
     6 
     7 struct TestData
     8 {
     9     int var_int;
    10     std::string var_string;
    11     std::wstring var_wstring;
    12 
    13 };
    14 
    15 class DealXml
    16 {
    17 public:
    18     typedef boost::property_tree::ptree ptree_type;
    19     typedef boost::property_tree::wptree wptree_type;
    20     DealXml(void);
    21     ~DealXml(void);
    22 
    23     bool read_xmlW(std::basic_istream<wptree_type::key_type::value_type>& bis);
    24     bool write_xmlW(std::basic_ostream<wptree_type::key_type::value_type>& bos);
    25     bool open_file_and_read_xmlW(const std::string &filepath);
    26     bool open_file_and_write_xmlW(const std::string &filepath);
    27 private:
    28     ptree_type pt;
    29     wptree_type wpt;
    30     TestData m_TestData;
    31 };

    DealXml.cpp

      1 #include "DealXml.h"
      2 
      3 #include <iostream>
      4 #include <fstream>
      5 #include <string>
      6 
      7 #include <boost/property_tree/xml_parser.hpp>
      8 #include <boost/property_tree/detail/xml_parser_flags.hpp>
      9 #include <boost/foreach.hpp>
     10 
     11 using namespace std;
     12 using namespace boost;
     13 
     14 DealXml::DealXml(void)
     15 {
     16 }
     17 
     18 
     19 DealXml::~DealXml(void)
     20 {
     21 }
     22 
     23 bool DealXml::read_xmlW(std::basic_istream<wptree_type::key_type::value_type>& bis)
     24 {
     25     bool is_success = false;
     26 
     27     do 
     28     {
     29         try
     30         {
     31             boost::property_tree::xml_parser::read_xml(bis, wpt, boost::property_tree::xml_parser::no_concat_text|boost::property_tree::xml_parser::trim_whitespace);
     32 
     33             std::wstring wstr_test = wpt.get<std::wstring>(L"root.<xmlattr>.value");
     34 
     35             BOOST_FOREACH( wptree_type::value_type &v, wpt.get_child(L"root") )
     36             {
     37                 if ( L"ceng1"==v.first )
     38                 {
     39                     //无法获取xml数据
     40                     m_TestData.var_wstring = v.second.get_value<std::wstring>(L"ceng1");
     41                     m_TestData.var_wstring = v.second.get_value<std::wstring>();
     42                     //wchar_t *p = v.second.get_value<wchar_t*>(L"ceng1");
     43                     //m_TestData.var_wstring = v.second.get<std::wstring>(L"ceng1");
     44                     //m_TestData.var_int = v.second.get_value<int>(L"ceng1");
     45                     //m_TestData.var_string = v.second.get_value<std::string>(L"ceng1");
     46                     //std::cout << v.second.get_value<std::wstring>(L"ceng1") << std::endl;
     47                     std::wcout << v.second.get_value<std::wstring>(L"ceng1") << std::endl;
     48                     is_success = true;
     49                 }
     50             }
     51 
     52         }
     53         catch(const std::exception &e)
     54         {
     55             std::cout << e.what() << std::endl;
     56         }
     57 
     58 
     59     } while (false);
     60 
     61     return is_success;
     62 }
     63 bool DealXml::write_xmlW(std::basic_ostream<wptree_type::key_type::value_type>& bos)
     64 {
     65     bool is_success = false;
     66 
     67     do 
     68     {
     69         try
     70         {
     71             boost::property_tree::xml_parser::xml_writer_settings<wchar_t> settings(L'	', 1, L"utf-8");
     72             boost::property_tree::xml_parser::write_xml<wptree_type>(bos, wpt, settings);
     73         }
     74         catch(const std::exception &e)
     75         {
     76             std::cout << e.what() << std::endl;
     77         }
     78 
     79 
     80     } while (false);
     81 
     82     return is_success;
     83 }
     84 bool DealXml::open_file_and_read_xmlW(const std::string &filepath)
     85 {
     86     bool is_success = false;
     87 
     88     do 
     89     {
     90         try
     91         {
     92             std::basic_filebuf<wchar_t> bfb;
     93             if (bfb.open(filepath.c_str(), std::ios::in))
     94             {
     95                 std::basic_istream<wchar_t> bis(&bfb);
     96                 read_xmlW(bis);
     97                 bfb.close();
     98                 is_success = true;
     99             }
    100         }
    101         catch(const std::exception &e)
    102         {
    103             std::cout << e.what() << std::endl;
    104         }
    105 
    106 
    107     } while (false);
    108 
    109     return is_success;
    110 }
    111 bool DealXml::open_file_and_write_xmlW(const std::string &filepath)
    112 {
    113     bool is_success = false;
    114 
    115     do 
    116     {
    117         try
    118         {
    119             std::basic_filebuf<wchar_t> bfb;
    120             if (bfb.open(filepath.c_str(), std::ios::out))
    121             {
    122                 std::basic_ostream<wchar_t> bos(&bfb);
    123                 write_xmlW(bos);
    124                 bfb.close();
    125                 is_success = true;
    126             }
    127         }
    128         catch(const std::exception &e)
    129         {
    130             std::cout << e.what() << std::endl;
    131         }
    132 
    133 
    134     } while (false);
    135 
    136     return is_success;
    137 }
  • 相关阅读:
    赴美工作常识(Part 4
    赴美工作常识(Part 3
    50 年前的黑客黑什么?
    孩子王?有孩子气才能为王?
    赴美工作常识(Part 2
    UE4 Keynote 1
    Go Programming Language 3
    Go Programming Language 2
    Go Programming Language
    Lua语法要点2
  • 原文地址:https://www.cnblogs.com/superstargg/p/3848311.html
Copyright © 2011-2022 走看看