真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

c語言解析xml函數 c語言解析xml報文

c語言如何解析xml并將所有內容存入數組

/*?前段時間恰好做過類似的東西,代碼可以給你參考下。

創(chuàng)新互聯(lián)主要從事網站設計、成都網站設計、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務南昌縣,十多年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220

*??Xml配置見最后

*/

typedef?struct?SrcFileFmt

{

int???ColID;

char??ColCode[64];??????/*?字段英文名稱?*/

char??ColName[128];?????/*?字段中文名稱*/

char??ColType[20];??????/*?字段類型(包含長度)?*/

char??ColComment[128];??/*?字段描述?*/

}SrcFileFmt;

int?main(int?argc,?char?**argv)

{

SrcFileFmt?SrcFileFmt[128];

int?iNum?=?-1;

if?(?2??argc?)

{

printf("Usage:?%s?SrcXmlFile\n",?argv[0]);

return?-1;

}

iNum?=?parseSourceCfg(SrcCfgFile,?SrcFileFmt);

if?(iNum?==?-1)

{

return?-1;

}

return?0;

}

/*?調用此函數后,xml文件的內容會被存儲到結構體數組SrcFileFmt?srcfilefmt[]中

*?此函數依賴于libxml2-2.9.2.tar.xz

*/

int?parseSourceCfg(char?*FileName,?SrcFileFmt?srcfilefmt[])

{?/*?解析源文件xml,FileName?為源xml文件名?*/

xmlDocPtr?doc;

xmlNodePtr?cur,?root;

char?sFileName[64]?=?{'\0'};

int?cnt?=?0;

if?(FileName?==?NULL)

{

return?-1;

}

sprintf(sFileName,?"%s.xml",?FileName);

doc?=?xmlParseFile(sFileName);

if?(doc?==?NULL)

{

return?-1;

}

root?=?xmlDocGetRootElement(doc);

if?(root?==?NULL)?{

xmlFreeDoc(doc);

return(-1);

}

if?(xmlStrcmp(root-name,?(const?xmlChar?*)?"SrcRoot"))

{

xmlFreeDoc(doc);

return?-1;

}

cur?=?root-xmlChildrenNode;

while?(cur?!=?NULL)?

{

if?((!xmlStrcmp(cur-name,?(const?xmlChar?*)"Column")))

{

xmlChar?*key;

xmlNodePtr?cur_sub?=?cur;

cur_sub?=?cur_sub-xmlChildrenNode;

while?(cur_sub?!=?NULL)?

{

if?((!xmlStrcmp(cur_sub-name,?(const?xmlChar?*)"ColID")))?{

key?=?xmlNodeListGetString(doc,?cur_sub-xmlChildrenNode,?1);

killblank((char*)key);

srcfilefmt[cnt].ColID?=?atoi((char*)key);

xmlFree(key);

}

if?((!xmlStrcmp(cur_sub-name,?(const?xmlChar?*)"ColCode")))?{

key?=?xmlNodeListGetString(doc,?cur_sub-xmlChildrenNode,?1);

killblank((char*)key);

strcpy(srcfilefmt[cnt].ColCode,?(char*)key);

xmlFree(key);

}

else?if?((!xmlStrcmp(cur_sub-name,?(const?xmlChar?*)"ColName")))?{

key?=?xmlNodeListGetString(doc,?cur_sub-xmlChildrenNode,?1);

killblank((char*)key);

strcpy(srcfilefmt[cnt].ColName,?(char*)key);

xmlFree(key);

}

else?if?((!xmlStrcmp(cur_sub-name,?(const?xmlChar?*)"ColType")))?{

key?=?xmlNodeListGetString(doc,?cur_sub-xmlChildrenNode,?1);

killblank((char*)key);

strcpy(srcfilefmt[cnt].ColType,?(char*)key);

xmlFree(key);

}

else?if?((!xmlStrcmp(cur_sub-name,?(const?xmlChar?*)"ColComment")))?{

key?=?xmlNodeListGetString(doc,?cur_sub-xmlChildrenNode,?1);

killblank((char*)key);

strcpy(srcfilefmt[cnt].ColComment,?(char*)key);

xmlFree(key);

}

cur_sub?=?cur_sub-next;

}

cnt++;

}

cur?=?cur-next;

}

xmlFreeDoc(doc);?

return?cnt;

}

SrcRoot

Column

ColID1/ColID

ColCodekmh/ColCode

ColName字段1/ColName

ColTypeVARCHAR(11)/ColType

/Column

Column

ColID2/ColID

ColCodedfkmh/ColCode

ColName字段2/ColName

ColTypeVARCHAR(11)/ColType

/Column

Column

ColID3/ColID

ColCodehbh/ColCode

ColName字段3/ColName

ColTypeINTEGER(10)/ColType

/Column

/SrcRoot

C語言實現(xiàn)的XML解析器[2]

//////////////////////////////////////////////////// /// 說明 : 解析XML文件 返回XML的根節(jié)點 /// 參數 : /// : xml xml文件路徑 [in] /// : buffer 供解析用的緩沖 [in] /// : buffer_len 緩沖大小(單位:字節(jié)) [in] /// : error_reason 執(zhí)行出錯時保存錯誤原因 [in] /// : root XML的根節(jié)點 [out] /// 返回 : 成功 返回 失敗返回 /// 說明 : /// : 問 :供解析用的緩沖應該取多大比較合適呢? /// : 答 :供解析用的緩沖主要用來存放XML樹 所以 buffer_len = (XML文件的大小) * 即可 /// :

int mini_parse_xml (char* xml char* buffer int buffer_len char error_reason[ ] MINI_XML_NODE** root);

//////////////////////////////////////////////////// /// 說明 : 查找特定節(jié)點的子節(jié)點 /// 參數 : /// : father 父結點 [in] /// : name 子孩子節(jié)點名 [in] /// : child 子節(jié)點 [out]

int mini_find_child (MINI_XML_NODE* father char* name MINI_XML_NODE** child);

//////////////////////////////////////////////////// /// 說明 : 查找特定節(jié)點的屬性值 /// 參數 : /// : node 節(jié)點 [in] /// : name 屬性名 [in] /// : value 屬性值 [out]

int mini_find_attribute (MINI_XML_NODE* node char* name char** value);

//////////////////////////////////////////////////// /// 說明 : 打印XML樹 供調試用 int mini_print_tree (MINI_XML_NODE* root int layer);

#if defined (__cplusplus) || defined (c_plusplus) } #endif #endif

lishixinzhi/Article/program/net/201311/14908

用C語言讀取xml文件,怎么實現(xiàn)?

xml文件和txt文件相同,使用普通的文本操作函數即可讀取。

1、C語言標準庫提供了一系列文件操作函數。文件操作函數一般以f+單詞的形式來命名(f是file的簡寫),其聲明位于stdio.h頭文件當中。例如:fopen、fclose函數用于文件打開與關閉;fscanf、fgets函數用于文件讀??;fprintf、fputs函數用于文件寫入;ftell、fseek函數用于文件操作位置的獲取與設置。

2、例程:

#includestdio.h

int?a;

char?b,c[100];

int?main(){

FILE?*?fp1?=?fopen("input.xml",?"r");//打開xml格式輸入文件

FILE?*?fp2?=?fopen("output.txt",?"w");//打開輸出文件

if?(fp1==NULL?||?fp2==NULL)?{//若打開文件失敗則退出

puts("不能打開文件!");

rturn?0;

}

fscanf(fp1,"%d",a);//從輸入文件讀取一個整數

b=fgetc(fp1);//從輸入文件讀取一個字符

fgets(c,100,fp1);//從輸入文件讀取一行字符串

printf("%ld",ftell(fp1));//輸出fp1指針當前位置相對于文件首的偏移字節(jié)數

fputs(c,fp2);//向輸出文件寫入一行字符串

fputc(b,fp2);//向輸出文件寫入一個字符

fprintf(fp2,"%d",a);//向輸出文件寫入一個整數

fclose(fp1);//關閉輸入文件

fclose(fp2);//關閉輸出文件,相當于保存

return?0;

}

C語言xml解析

把所有的數據當做一個字符串

收到數據后先strstr(buffer,"?xml version=\"1.0\" encoding=\"UTF-8\"?");

如果返回的是NULL則表示沒有這段 退出

buffer是你收到的數據起始地址


網站名稱:c語言解析xml函數 c語言解析xml報文
瀏覽地址:http://weahome.cn/article/ddgidsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部