c語言解析xml

2021-06-05 10:18:05 字數 2148 閱讀 2294

根據導師的要求,要用c語言解析乙個xml檔案,用於對公升級檔案進行合法性判斷,進而對軟體進行公升級。

看了一些源**,發現他們主要使用樹型結構來實現對xml 的解析,由於能力有限吧,感覺很麻煩,可能占用記憶體也會很大,所以我苦苦思索了好久,決定使用遞迴的方法解析xml檔案,每當解析出相應的數值時,可以立即對這些數值進行判定是否合法,如果合法的話,可以繼續解析;如果不合法的話,就可以直接跳出。

對這個xml檔案,我做了很嚴格的定義:

《主標籤 屬性值1>

《子標籤》 屬性值2 《子標籤》

《下級子標籤》屬性值3在這裡,可以在標籤間的任何地方進行注釋,但禁止在標籤內部進行注釋;標籤可以有多層巢狀,但必須保證標籤有結束標誌,巢狀必須合法。

屬性值的規定方面,可以正確的解析屬性值2和屬性值3,但不會解析屬性值1,屬性值1可以起到注釋的作用。

下面貼出一些主要的**:

首先讀取xml檔案:

fp = fopen("update.xml","r");

if(fp == null) return 0;

while((c = getc(fp)) != eof)

然後對data陣列進行相應的處理,如下:

int xml_takecell(char *data, int start, int end, char *name)

;int keywords = 0;

int isok = 0;

if(update == 1) return 1;

nowstart = xml_getnamestart(data,start,end,name);

nowend = xml_getnameend(data,nowstart,end,name); 

keywords = iskeywords(name);

switch(keywords)

isok = checkupdate(node_name,keywords,value);

if(isok == 1) return 0;

if(flag == 1 && nowend return 0;

}這是實現遞迴的核心**,其中,函式xml_getnamestart()、xml_getnameend()是對同乙個標籤的開始處和結尾處進行查詢,返回值是所在陣列的位置,然後可以在此標籤內部進行遞迴查詢,直到找到最低一級的標籤,並利用 xml_getvalue()獲取標籤的屬性值。函式checkupdate()是對獲取的屬性值合法性做判斷,如果是非法的,可以直接跳出此次處理。key_updatelist、key_swversion這些是自己事先定義的標籤名。

各函式如下:

函式xml_getnamestart:

int xml_getnamestart(char *data, int start, int end, char *name)

if(flag == 1)

}return now;

}函式xml_getnameend:

int xml_getnameend(char *data, int start, int end, char *name)

;int ok = 0;

while(now < end)

/*這裡表示標籤以空格或》結尾,也解釋了屬性值1為什麼不能解析*/

else if((data[now] == '>' || data[now] == ' ') && flag == 1)

if(flag == 1)

else if(name[i] != data[now])

}if(ok == strlen(name)) break;

}// printf("xml_getnameend---->name is %s now is %d \n",name,now);

return now;

}函式xml_getvalue:

/*在 > 和 < 之間為屬性值*/

int xml_getvalue(char *data, int start, int end, char *value)

;cleanstring(value,45);

if(data[i+start] == '>') start++;

for(i = 0; i+start< end; i++)

return 0;

}這些**寫的比較業餘,以後還要多多鍛鍊一下**的編寫規範。

C語言實現XML生成解析庫 XML擴充套件

放假期間在家有點無聊,前一段時間對xml的生成 解析比較感興趣,便根據自己對xml的理解結合鍊錶實現乙個xml的製作與解析的結構。設計採用了固定格式頭資訊加自定義頭資訊 xml version xml encoding utf 8 這段資料屬於固定格式頭資訊,裡面的 xml 和 utf 8 可以通過...

C 解析XML檔案

內容提要 1.解析xml檔案有哪些方法?各有什麼優缺點?2.如何用xpath解析xml文件的要點。先來看看解析xml檔案的方法都有哪些吧,本段文字來自網路,可以幫助大家對這個問題有個概要的了解。在程式中訪問並操作xml檔案一般有兩種模型 流模型和dom 文件物件模型 流模型中有兩種變體 推 模型和 ...

C 解析XML檔案

我在這裡使用xmldocument通過using system.xml命名空間 xmldocument xml newxmldocument 先例項化 xmldocument xml.load path path可以為相對路徑或者為絕對路徑 xmlnodelist province xml.docu...