libxml使用記錄

 本次做便捷巡檢的任務,對於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在拷貝的源地址指向的字符串包含了換行與很多空格就不能用?(疑難問題)!

     

發佈了21 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章