UNICODE模式下使用rapidxml写xml文件 rapidxml 中文路径

http://blog.csdn.net/ShowLong/archive/2010/12/06/6058273.aspx

rapidxml介绍:略


也许你下载了rapidxml以后,想在UNICODE模式下使用,但编译时会失败并提示错误,该错误提示如下:
errorC2440: '<function-style-cast>' : cannot convert from'std::basic_ostream<_Elem,_Traits>' to'std::ostream_iterator<_Ty>'
既然给了提示,意思是说:给定的参数类型与函数所需类型不正确,那么我们就解决之。


以下代码均在rapidxml_print.hpp文件中400行位置:

首先我们看一看print参数模板:
template<class _Ty, class _Elem = char, class _Traits = char_traits<_Elem> >
class ostream_iterator

然后再看一看print函数模板:
template<class Ch>
inlinestd::basic_ostream<Ch> &print(std::basic_ostream<Ch>&out, const xml_node<Ch> &node, int flags = 0)
对于Ch类型来说,就是为了指定函数的能解析的字符集,那么我们这里可以是chat,wchar_t,当然自动化的TCHAR也行。


然而我们再看一看函数在转换参数模板的地方:
print(std::ostream_iterator<Ch>(out), node, flags);
这里在转换迭代器的时候,虽然把字符集给指定了,但没有指定函数转换集,因为我们需要改为:
print(std::ostream_iterator<Ch,Ch>(out), node, flags);
因为ostream_iterator的第二个模板参数默认是char,当我们需要用wchar_t解析的时候,这里参数类型肯定不对。
不知道这个BUG是作者的笔误还是怎么的,我们不用管,到此,在UNICODE模式下用rapidxml写xml文件即可成功。


写文件的方法,看代码:

view plaincopy to clipboardprint?
  1. #include<iostream>
  2. #include<tchar.h>
  3. #include"rapidxml.hpp"
  4. #include"rapidxml_print.hpp"
  5. #include"rapidxml_utils.hpp"
  6. voidmain()
  7. {
  8. rapidxml::xml_document<TCHAR>doc;
  9. rapidxml::xml_node<TCHAR>*node;
  10. node=doc.allocate_node(rapidxml::node_element,_T("开发者信息"),NULL);
  11. doc.append_node(node);
  12. node->append_attribute(doc.allocate_attribute(_T("网址"),_T("http://blog.csdn.net/showlong")));
  13. node->append_attribute(doc.allocate_attribute(_T("作者"),_T("showlong")));
  14. node->append_attribute(doc.allocate_attribute(_T("发表日期"),_T("2010.12.06")));
  15. #ifdefUNICODE
  16. std::wofstreamxml_file(_T("config.xml"));
  17. xml_file.imbue(std::locale("CHS"));
  18. #else
  19. std::ofstreamxml_file(_T("config.xml"));
  20. #endif
  21. //方法1:当需写入文件时排除沉余空格之类的时候
  22. {
  23. rapidxml::print((std::basic_ostream<TCHAR>&)xml_file,doc,rapidxml::print_no_indenting);
  24. }
  25. //方法2:直接写文件
  26. {
  27. xml_file<<doc;
  28. }
  29. //方法3:直接写到内存块中
  30. {
  31. TCHARdst_data[4096]={0};
  32. TCHAR*dst_end=rapidxml::print(dst_data,doc,0);
  33. size_tfile_size=dst_end-dst_data;
  34. }
  35. system("pause");
  36. }


!!!请注意!!!:
上面代码如果在UNICODE下编译通过,请先按如下修改:
rapidxml_print.hpp文件中403行:
print(std::ostream_iterator<Ch>(out), node, flags);
修改为:
UNICODE模式下使用rapidxml写xml文件 rapidxml 中文路径
print(std::ostream_iterator<Ch,Ch>(out), node, flags);


(#)


  

爱华网本文地址 » http://www.aihuau.com/a/25101011/67251.html

更多阅读

recovery 模式下手动刷机的方法 刷机精灵recovery模式

如果已经无法开机, 请尝试以下方法来刷机!方法/步骤拷贝ROM可尝试在recovery模式下将ROM拷贝到手机,如果无法连接,可将手机的SD卡用读卡器挂载,然后将下载好的ROM放入SD卡的根目录!(ROM的文件名最好不要有中文,符号,空格!)进入Recovery

怎样使用LeapFTP上传文件 leapftp使用教程

本例用 LeapFTP v2.75 说明如何上传。怎样使用LeapFTP上传文件——工具/原料LeapFTP v2.75 怎样使用LeapFTP上传文件——步骤/方法怎样使用LeapFTP上传文件 1、下载安装leapftp。然后启动LeapFTP怎样使用LeapFTP上传文件 2、点 "Ad

怎么写robots文件 网站robots.txt怎么写

robots文件是用来告诉搜索引擎:这个网站上哪些部分可以被访问、哪些不可以,robots文件是存放在网站根目录下的一个纯文本文件。当搜索引擎访问一个网站时,它首先会检查该网站根目录下是否存在robots文件。robots文件必须放置在一个网站

声明:《UNICODE模式下使用rapidxml写xml文件 rapidxml 中文路径》为网友岁月之沉淀分享!如侵犯到您的合法权益请联系我们删除