windows下xmllib2使用簡介 64位

1:環境配置

包含目錄下? ? 包含include? ? libxml2_64\include?? ? ?     包含xmllib庫路徑  libxml2_64? ? 注意 libxml分為32位程序和64位程序,這兩種的環境需要的lib不一樣,需要分別下載

需要使用庫??libxml2.lib??

注意:往xml文件中寫入數據只能是utf-8類型的 所以當往xml文件中輸入中文時候需要把GBK2312轉換為utf-8,解析的時候需要把utf8轉換為GBK2312,使用的函數

static int GB2312ToUtf8(const char* gb2312, char* utf8)
{
int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, utf8, len, NULL, NULL);
if(wstr) delete[] wstr;
return len;
}


//UTF-8到GB2312的轉換
static int Utf8ToGB2312(const char* utf8, char* gb2312)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, gb2312, len, NULL, NULL);
if(wstr) delete[] wstr;
return len;
}

使用xml文件

創建xml文件并寫入相應節點

int write_xml(char *filename,char*node,char*data) //filename:: xml文件名 node::寫入的節點名 data:寫入的節點數據
{
xmlDocPtr doc;
doc = xmlReadFile(filename, "GB2312", XML_PARSE_NOBLANKS);
if(doc == NULL) //文件不存在 創建一個新文件
{
xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");
xmlNodePtr root_node = xmlNewNode(NULL,BAD_CAST"root");
//設置根節點
xmlDocSetRootElement(doc,root_node);
xmlNewTextChild(root_node, NULL, BAD_CAST node, BAD_CAST data);
xmlSaveFormatFileEnc(filename,doc,"GB2312",1);
xmlFreeDoc(doc);
return 0;
}
xmlNodePtr cur;
cur = xmlDocGetRootElement(doc);
if(cur == NULL)
{
xmlFreeDoc(doc);
return -1;
}
xmlNewTextChild(cur, NULL, BAD_CAST node, BAD_CAST data);

int nRel = xmlSaveFormatFileEnc(filename,doc,"GB2312",1);
xmlFreeDoc(doc);
return 0;
}

?

解析xml文件

xmlChar* ReadXml(char* filename,char* node_content) //filename:xml文件名 node_content:xml節點的節點名
{
xmlDocPtr doc; //定義解析文檔指針
xmlNodePtr node; //定義結點指針(你需要它為了在各個結點間移動)
xmlKeepBlanksDefault(0); //避免將空格當作一個節點
doc = xmlParseFile(filename);
if(doc == NULL) //xml文件不存在
{
fprintf(stderr,"parse error\n");
return NULL;
}
node = xmlDocGetRootElement(doc);
if(node == NULL)
{
fprintf(stderr, "doc has no content\n");
}
char str[256]={0};
node = node->children;
while(node != NULL)
{
if(xmlStrcmp(node->name,(const xmlChar*)node_content)==0)
{
return xmlNodeGetContent(node);
}
node = node->next;
}
xmlFreeDoc(doc);
return NULL;
}

注意:xml文件原型其實是個二叉樹,用鏈表組成的,使用的時候首先打開文件,找到頭節點,然后在往頭結點添加新節點和給新節點添加屬性,具體不一一列舉

特別注意:xml文件的節點名稱不能是數字,必須是字母(字母后面可以接數字),否則解析xml文件時不能識別該節點

轉載于:https://www.cnblogs.com/jameflight/p/9806547.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449530.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449530.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449530.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

backtrader2

backtrader的基本策略構成: #構成 #Backtrader 回測代碼編寫流程如下: import backtrader as bt # 導入 Backtrader import backtrader.indicators as btind # 導入策略分析模塊 import backtrader.feeds as btfeeds # 導入數據模塊# 創建策略 class T…

解決瀏覽器 Provisional headers are shown 無法向后臺發送請求問題

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 我的情況和下面情況一樣,有一個斷點。 今天調試項目BUG,頁面的一個按鈕點擊后頁面無反應,去后臺找對…

臺灣郵政歷史常設展重新開幕

1月29日,重新開幕的臺灣郵政歷史常設展增加了與觀眾的對話和互動,希望吸引不同年齡層觀眾。中新社記者 孔任遠 攝 1月29日,重新開幕的臺灣郵政歷史常設展增加了與觀眾的對話和互動,希望吸引不同年齡層觀眾。中新社記者 孔任遠 攝 …

如何用vc6編譯ffmpeg, 并單步調試。

如何用vc6編譯ffmpeg, 并單步調試。目前官方ffmpeg的最新版本為0.9, 我們就以此為例: 1. 下載最新git版本的源代碼(http://ffmpeg.zeranoe.com/builds/, 本例下載的是2011-12-12版本) 2. 放到MSYS環境里配置,生成config.h文件。mingw gcc是能順利編譯…

backtrader指標

添加分析指標 # 添加分析指標 # 返回年初至年末的年度收益率 cerebro.addanalyzer(bt.analyzers.AnnualReturn, _name_AnnualReturn) # 計算最大回撤相關指標 cerebro.addanalyzer(bt.analyzers.DrawDown, _name_DrawDown) # 計算年化收益:日度收益 cerebro.addana…

Javascript DOM對屬性的操作

獲得屬性值 itnode . 屬性名稱          //只能操作w3c規定內容 itnode . getAttribute(屬性名稱)    //規定的 和 自定義的都可以獲取 設置屬性值 itnode . 屬性名稱 值        //只能操作w3c規定的屬性 itnode . setAttribute(名稱,值) …

172開頭的IP不一定是局域網的地址

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 A類 10.0.0.0-10.255.255.255 網絡數:1B類 172.16.0.0-172.31.255.255 網絡數:16C類 192.168.0.0-192.168.255.…

微信屏蔽百度紅包活動頁面,誰在焦慮?

1月29日消息,百度與中央電視臺合作的百度紅包鏈接分享頁面被微信屏蔽,打開相關頁面顯示:網頁包含誘導分享、關注等誘導行為內容,被多人投訴,為維護綠色上網環境,已經停止訪問該網頁。 雷鋒網了解到&#x…

Visual C++利用Intel C++ 編譯器提升多核性能與多媒體指令支持獲取更高的程序效率與縮小程序體積

Intel c編譯器有下列優點,建議VC項目開發采用intel c編譯器取代VS自帶c編譯器: 與 Microsoft Visual C 相兼容,可以嵌入 Microsoft Visual Studio 開發環境。 支持最新的多核處理器,并提供安全功能,可以通過執行堆棧…

Backtrader交易基礎

查看賬戶情況: class TestStrategy(bt.Strategy):def next(self):print(當前可用資金, self.broker.getcash())print(當前總資產, self.broker.getvalue())print(當前持倉量, self.broker.getposition(self.data).size)print(當前持倉成本, self.broker.getpositio…

IP地址分類/IP地址10開頭和172開頭和192開頭的區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 IP地址分類/IP地址10開頭和172開頭和192開頭的區別/判斷是否同一網段 簡單來說在公司或企業內部看到的就基本都是內網IP,AB…

Redis數據結構之簡單動態字符串SDS

Redis的底層數據結構非常多,其中包括SDS、ZipList、SkipList、LinkedList、HashTable、Intset等。如果你對Redis的理解還只停留在get、set的水平的話,是遠遠不足以應對面試提問的。本文簡單介紹了Redis底層最重要的數據結構 - 簡單動態字符串&#xff08…

Centos7 安裝OpenTSDB

Centos7 安裝OpenTSDB https://www.imzcy.cn/1697.html轉載于:https://www.cnblogs.com/RHadoop-Hive/p/10563385.html

職場潛規則冷思考:別讓老板“殺”了你

一位3年前共事過的同事走了,就在他以200多萬的房貸代價拿到大門鑰匙的時候,猝然倒在新房的樓梯上。另一個曾經在同一戰壕里沖鋒陷陣的同事被老板辭掉了,兢兢業業,起早貪黑,竟然沒有熬過35歲下崗這一關,這時…

Backtrader交易基礎2

成交價格確定: Order.Market 市價單,以當時市場價格成交的訂單,不需要自己設定價格。市價單能被快速達成交易,防止踏空,盡快止損/止盈; 按下一個 Bar (即生成訂單的那個交易日的下一個交易日&…

windows 小技巧

2019獨角獸企業重金招聘Python工程師標準>>> 桌面圖標顯示不全、圖標呈現白色方塊 ie4uinit -show 關閉占用指定端口的進程 獲取進程: netstat -ano | findstr 端口號關閉進程:taskkill -f -pid 進程號文件被占用 打開任務管理器,切換到 性能…

進一步了解 apt-get 的幾個命令

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 用 apt-get 也很久了,沒多想它的實現,最近遇到 gstreamer 裝不上的問題,才多看看了它 apt-get 就是…

java學習筆記20(Arraylist復習,Collection接口方法,迭代器,增強型for循環)

集合:集合是Java提供的一種容器,可以用來存儲多個數據; 集合與數組的區別:集合的長度是可變的,數組的長度是固定的 集合中存儲的數據必須是引用類型數據; ArrayList回顧: public class Person {…

backtrader數據基礎

cerebro bt.Cerebro() cerebro.addstrategy(TestStrategy2) codes[600862.SH,300326.SZ,300394.SZ] #加載最近兩日交易數據 for code in codes:feed Addmoredata(dataname get_data(code,20200506),namecode)cerebro.adddata(feed) cerebro.run() 數據查看: cl…

談判學:三招了解對方底線

導讀:談判者都希望能了解對方的底線,最直接的一招就是將對手變成“朋友”,只是這種“內奸法”畢竟不是常規之法。大多數情況下,談判雙方也不可能像《無間道》一樣在對方陣營安放臥底,但是我們完全可以通過一些辦法來揣…