日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows下xmllib2使用简介 64位

發(fā)布時(shí)間:2023/12/18 windows 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows下xmllib2使用简介 64位 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1:環(huán)境配置

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

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

注意:往xml文件中寫入數(shù)據(jù)只能是utf-8類型的 所以當(dāng)往xml文件中輸入中文時(shí)候需要把GBK2312轉(zhuǎn)換為utf-8,解析的時(shí)候需要把utf8轉(zhuǎn)換為GBK2312,使用的函數(shù)

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的轉(zhuǎn)換
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文件

創(chuàng)建xml文件并寫入相應(yīng)節(jié)點(diǎn)

int write_xml(char *filename,char*node,char*data) //filename:: xml文件名 node::寫入的節(jié)點(diǎn)名 data:寫入的節(jié)點(diǎn)數(shù)據(jù)
{
xmlDocPtr doc;
doc = xmlReadFile(filename, "GB2312", XML_PARSE_NOBLANKS);
if(doc == NULL) //文件不存在 創(chuàng)建一個(gè)新文件
{
xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0");
xmlNodePtr root_node = xmlNewNode(NULL,BAD_CAST"root");
//設(shè)置根節(jié)點(diǎn)
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節(jié)點(diǎn)的節(jié)點(diǎn)名
{
xmlDocPtr doc; //定義解析文檔指針
xmlNodePtr node; //定義結(jié)點(diǎn)指針(你需要它為了在各個(gè)結(jié)點(diǎn)間移動)
xmlKeepBlanksDefault(0); //避免將空格當(dāng)作一個(gè)節(jié)點(diǎn)
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文件原型其實(shí)是個(gè)二叉樹,用鏈表組成的,使用的時(shí)候首先打開文件,找到頭節(jié)點(diǎn),然后在往頭結(jié)點(diǎn)添加新節(jié)點(diǎn)和給新節(jié)點(diǎn)添加屬性,具體不一一列舉

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

轉(zhuǎn)載于:https://www.cnblogs.com/jameflight/p/9806547.html

總結(jié)

以上是生活随笔為你收集整理的windows下xmllib2使用简介 64位的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。