2.解決boost對xml中中文亂碼問題
3.實現普通字符串和寬字符串的傻瓜切換(模仿tchar.h)
4.代碼運行環境為VS2010,需要導入boost庫才能正常運行
5.VS2010運行時可能會發生錯誤。例如:cl.exe 或者 cvtres.exe 報錯。 解決辦法就是重新打開項目或者切換其它正常項目運行一下(反正我是這麼解決的)
#include <iostream> #include <> #include <exception> #include <map> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/xml_parser.hpp> #include <boost/program_options/detail/convert.hpp> #include <boost/program_options/detail/utf8_codecvt_facet.hpp> #include <boost/.hpp> CHINESE_CHARSET tptree boost::property_tree::wptree tstring std::wstring _USERT(x) L ## x tptree boost::property_tree::ptree tstring std::string _USERT(x) x LoadXML(tptree &o_pt, std::locale current_locale(locale(), ( std::exception & cout << << typeid(e).name() << cout << e.what() << SaveXML( tptree &i_pt, std::locale current_locale(locale(), boost::property_tree::xml_parser::xml_writer_settings<wchar_t> settings(L, , L boost::property_tree::xml_parser::xml_writer_settings<> settings(, , ( std::exception & cout << << typeid(e).name() << cout << e.what() << IsExistChildNode( tptree &i_pt, tptree pt = ; ; ( std::exception & cout << << typeid(e).name() << cout << e.what() << -; - IsChildNodeOrAttr( tptree & , , & , &o_nChildNodeCount , &o_nChildNodeAttributeCount) o_bChildNodeOrAttribute = ; o_nChildNodeCount = ; o_nChildNodeAttributeCount = ; tstring l_strChildNode; tstring l_strXmlAttr(_USERT()); tstring l_strAttrPath(_USERT()); l_bflag = ; l_bExistChildNode = (== ; BOOST_FOREACH ( tptree::value_type & l_strChildNode = (l_strChildNode==l_strXmlAttr && == BOOST_FOREACH ( tptree::value_type &v, i_pt.get_child(i_strNodePath+ ++ o_bChildNodeOrAttribute = ; l_bflag = ++ o_bChildNodeOrAttribute = ; ( std::exception & cout << << typeid(e).name() << cout << e.what() << ; template<typename type> GetChildNodes( tptree &i_pt, tstring i_strNodePath, multimap<tstring, type> & tstring l_strXmlAttr(_USERT()); l_bExistChildNode = (== ; BOOST_FOREACH ( tptree::value_type & l_strChildNode = l_tpChildNodeValue = v.second.get_value<type> (!= o_mmapChildNodes.insert(pair<tstring, type> runtime_error( ( std::exception & cout << << typeid(e).name() << cout << e.what() << ; template<typename type> GetCurrentNodeAttrs( tptree &i_pt, tstring i_strNodePath, map<tstring, type> & tstring l_strXmlAttr(_USERT()); tstring l_strAttrPath(_USERT()); l_bExistChildNode = (== ; (l_strXmlAttr==i_pt.get_child(i_strNodePath).begin()-> BOOST_FOREACH ( tptree::value_type &v, i_pt.get_child(i_strNodePath+ l_strChildNodeAttr = l_tpChildNodeAttrValue = v.second.get_value<type> o_mapCurrentNodeAttrs.insert(pair<tstring, type> runtime_error( ( std::exception & cout << << typeid(e).name() << cout << e.what() << ; template<typename type> GetChildNodesAttrs( tptree &i_pt, tstring i_strNodePath, multimap<tstring, map<tstring, type>> & tstring l_strXmlAttr(_USERT()); tstring l_strAttrPath(_USERT()); l_bExistChildNode = IsExistChildNode(i_pt, i_strNodePath); (== ; tstring l_strChildNode = tstring l_strChildNodeAttrPath = i_strNodePath+_USERT()+l_strChildNode+ l_bExistChildNodeAttr = IsExistChildNode(i_pt, l_strChildNodeAttrPath); (== ; BOOST_FOREACH ( tptree::value_type & map<tstring, type> l_strChildNode = BOOST_FOREACH ( tptree::value_type & l_strChildNodeAttr = l_tpChildNodeAttrValue = subv.second.get_value<type> l_mapChildNodeAttrs.insert(pair<tstring, type> o_mmapChildNodesAttrs.insert(pair<tstring, map<tstring, type>> ( std::exception & cout << << typeid(e).name() << cout << e.what() << ; SetCurrentNodeValue(tptree::iterator io_iter, io_iter->second.put_value<tstring> ( std::exception & cout << << typeid(e).name() << cout << e.what() << ; SetCurrentNodeAttrValue(tptree::iterator io_iter, io_iter->second.put_value<tstring> ( std::exception & cout << << typeid(e).name() << cout << e.what() << ; DelCurrentNode(tptree & ( std::exception & cout << << typeid(e).name() << cout << e.what() << ; tptree::size_type DelCurrentNodes(tptree &io_pt, tstring & ( std::exception & cout << << typeid(e).name() << cout << e.what() << -; - l_strFileName1( l_strFileName2( f = cout << }