UNICODE模式下使用rapidxml写xml文件

rapidxml介绍:略


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


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

首先我们看一看print参数模板:
template >
class ostream_iterator

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


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


写文件的方法,看代码:

 #include #include #include "rapidxml.hpp" #include "rapidxml_print.hpp" #include "rapidxml_utils.hpp" void main() { rapidxml::xml_document doc; rapidxml::xml_node* node; node = doc.allocate_node(rapidxml::node_element, _T("开发者信息"), NULL); doc.append_node(node); node->append_attribute(doc.allocate_attribute(_T("网址"), _T("http://blog.csdn.net/showlong"))); node->append_attribute(doc.allocate_attribute(_T("作者"), _T("showlong"))); node->append_attribute(doc.allocate_attribute(_T("发表日期"), _T("2010.12.06"))); #ifdef UNICODE std::wofstream xml_file(_T("config.xml")); xml_file.imbue(std::locale("CHS")); #else std::ofstream xml_file(_T("config.xml")); #endif // 方法1:当需写入文件时排除沉余空格之类的时候 { rapidxml::print((std::basic_ostream&)xml_file, doc, rapidxml::print_no_indenting); } // 方法2:直接写文件 { xml_file<


!!!请注意!!!:
上面代码如果在UNICODE下编译通过,请先按如下修改:
rapidxml_print.hpp文件中403行:
print(std::ostream_iterator(out), node, flags);
修改为:
print(std::ostream_iterator(out), node, flags);

你可能感兴趣的:(C++编程,xml,iterator,basic,dst,file,class)