在arm嵌入式linux下解析XML檔案

2021-04-18 13:20:00 字數 1788 閱讀 5315

在arm嵌入式linux下解析xml檔案

最近在arm-linux下做個專案,需要在本地記錄一些資料,日誌之類的東西.本來準備隨便用文字檔案記錄下完事,突然看到了rss,於是想起了xml.自己還沒有用過xml,於是打算用xml來存放這個寫資料,算是練個手.     由於以前沒有了解過xml程式設計,所以查閱了點資料.原來目前的xml解析器一般有兩種解析的形式.一種是dom模型的,一種是sax2模型的.dom模型是講xml檔案中的結構解析成一棵樹,然後再進行各種操作;而sax2模型是類似與事件處理的方式從頭到位解析xml檔案.兩種方式各有優劣,不過在嵌入式裝置上用dom模型的解析器似乎太耗記憶體,所以一般都用sax2的解析器.而我使用的正是linux下的expat,是符合sax2模型的.     好像linux都有自帶expat的庫,不過我為了移植到arm板上還是去下了個原始碼包.先交叉編譯通過確認可以使用了才開始學習具體的使用.在原始碼包中有乙個幫助檔案已經很詳細的介紹了庫中每個函式的用途和入門程式設計.基本上看這個就夠用了.     查閱了幫助發現其實只需要3,4個函式就可以搞定大部分的工作.

xml_parser xml_parsercreate(const xml_char *encoding);
建立乙個xml的物件.

xml_setelementhandler(xml_parser p, xml_startelementhandler start, xml_endelementhandler end);

是設定處理元素頭尾的函式.

xml_setcharacterdatahandler(xml_parser p,xml_characterdatahandler charhndl)

設定元素內文字的處理函式.

void xml_setuserdata(xml_parser p,void *userdata);

設定乙個共享的資料結構給各各處理函式使用.

xml_status xml_parse(xml_parser p,const char *s,int len,int isfinal);

這個是主處理函式.通過給xml_parse物件指定乙個含有xml文字的char型陣列s,來解析xml.解析的過程就是在讀

到某個位置就呼叫的處理函式來處理.比如讀到元素的頭部,就呼叫在

xml_setelementhandler中設定的start函式來處理.

上面描述的有些空洞,看個例子就全明白了:

要解析這樣乙個xml:

a greate guy!

顯示其中的attr和content,程式如下:

void starthandle(void *userdata, const char *el, const char **attr)   }

void endhandle(void *data, const char *el)

void chardatahandle(void *data,char *s,int len)

int readxml(char *xmlbuf,int bufsize)

xml_parserfree(g_parser);

return 0;

} //程式大概就是這樣,但是沒有除錯,不能保證正確:)

上邊就是整個處理程式,是要呼叫readxml,傳入xml的buf就可以解析了.基本上所有expat程式的框架都是這個樣子,稍作改動就可以用在自己的程式裡.

嵌入式,ARM掃盲

炮製了一篇,基本是拿來主義,不算技術,只能算雜談。注 此處正常模式和普通模式是我生造的術語,沒有確定是否存在,各位請暫且忽略。arm異常處理過程 arm的異常,包括復位 未定義指令 軟體中斷 資料訪問中止 外部中斷請求 快 速中斷請求。處理過程 1 儲存現場,包括處理器當前狀態 中斷遮蔽位 cpsr...

ARM嵌入式實驗

問題 在startup.s中增加函式,由c程式呼叫,以此取得彙編中相關引數的設定值。獲取pll中m,p值,c程式呼叫彙編函式 在c語言中,要extern 乙個函式宣告即可,然後這個函式在彙編裡面實現。在彙編裡面,用export 把c語言定義的函式名引進來,再開始編寫函式名開始的段 實現 c程式呼叫 ...

嵌入式Linux之ARM彙編基礎

對於 cortex a 晶元來講,大部分晶元在上電以後c 語言環境還沒準備好,所以第一行程式肯定是彙編的,至於要寫多少匯程式設計序,那就看你能在哪一步把 c 語言環境準備好。所謂的 c語言環境就是保證 c 語言能夠正常執行。c 語言中的函式呼叫涉及到出棧入棧,出棧入棧就要對堆疊進行操作,所謂的堆疊其...