windows下xmllib2使用简介 64位
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5 学习手笔二:canvas A
- 下一篇: 无人承运平台系统流程图