libxml使用记录

来源:互联网 发布:mac桌面文件放哪里 编辑:程序博客网 时间:2024/06/05 07:42

 本次做便捷巡检的任务,对于xml的操作采用了libxml的方式,此过程中遇到了编码的问题,但是没有深入去了解,首先对于libxml库的搭建,(已经记录在文档里)。

    第一步,首先读取xml文件,发现出现解析的是乱码,原因是我的自定义XML文件的声明encoding="GB2312",但是libxml的默认只解析是UTF-8,故此解析乱码。所以换到UTF-8,妥协了。

    第二步,发现libxml的字符类型是unsigned char* 这和char* 是不同的,强制转换(char*),在使用xmlChar*给string赋值时,报错,运行时错误,只好换成memcpy函数。

     这中间以为string是个数据类型,在vs2008里直接查看,当时,始终提示<无法计算>,后来才忽然明白,string是个类,得用c_str()方法去输出里面的字符串值(这真丢人)。

     后来用 memcpy((char*)DBItem->SourceID.c_str(),szAttr,strlen((char*)szAttr)+1);

     拷贝要计算拷贝长度,当时用的是sizeof(szAttr)值一直是4,后来明白这计算的是指针的长度,而不是指向的字符串长度,故采取strlen方法,但是输出目的string值的时候,发现乱码,后来才明白,strlen少加了'\0'的一个长度,故‘+1’。

     在我解析配置节点的内容时,将长字符用memcpy拷贝到我的(char*)string.c_str()对象时发现,自己的string对象指向的地址已经乱码了,后来只能创建了临时的char*指针,TRACE输出时,才没有报错。是不是memcpy在拷贝的源地址指向的字符串包含了换行与很多空格就不能用?(疑难问题)!

     

0 0
原创粉丝点击