解析xml文件
解析乙個xml文件,從中取出想要的資訊,例如節點中包含的文字,或者某個節點的屬性,其流程如下:
用xmlreadfile函式讀出乙個文件指標doc;
用xmldocgetrootelement函式得到根節點curnode;
curnode->xmlchildrennode就是根節點的子節點集合;
輪詢子節點集合,找到所需的節點,用xmlnodegetcontent取出其內容;
用xmlhasprop查詢含有某個屬性的節點;
取出該節點的屬性集合,用xmlgetprop取出其屬性值;
用xmlfreedoc函式關閉文件指標,並清除本文件中所有節點動態申請的記憶體。
3.4 使用xpath查詢xml文件
簡而言之,xpath之於xml,好比sql之於關聯式資料庫。要在乙個複雜的xml文件中查詢所需的資訊,xpath簡直是必不可少的工具。
xpath語法簡單易學,並且有乙個很好的官方教程,見
這個站點的xml各種教程齊全,並且有包括中文在內的各國語言版本,真是讓我喜歡到非常!
使用xpath之前,必須首先熟悉幾個資料型別和函式,它們是使用xpath的前提。在libxml2中使用xpath是非常簡單的,其流程如下:
呼叫 xmlparsefile 來從檔案中獲得新的 xml 文件
定義乙個xpath上下文指標xmlxpathcontextptr context,並且使用xmlxpathnewcontext函式來初始化這個指標;
定義乙個xpath物件指標xmlxpathobjectptr result,並且使用xmlxpathevalexpression函式來計算xpath表示式,得到查詢結果,將結果存入物件指標中;
使用result->nodesetval得到節點集合指標,其中包含了所有符合xpath查詢結果的節點;
使用xmlxpathfreecontext釋放上下文指標;
使用xmlxpathfreeobject釋放xpath物件指標;
3.5內部字元型別xmlchar
xmlchar是libxml2中的字元型別,庫中所有字元、字串都是基於這個資料型別。事實上它的定義是:xmlstring.h
typedef unsigned char xmlchar;
使用unsigned char作為內部字元格式是考慮到它能很好適應utf-8編碼,而utf-8編碼正是libxml2的內部編碼,其它格式的編碼要轉換為這個編碼才能在libxml2中使用。
還經常可以看到使用xmlchar*作為字串型別,很多函式會返回乙個動態分配記憶體的xmlchar*變數,使用這樣的函式時記得要手動刪除記憶體。
2.2 xmlchar相關函式
如同標準c中的char型別一樣,xmlchar也有動態記憶體分配、字串操作等相關函式。例如xmlmalloc是動態分配記憶體的函式;xmlfree是配套的釋放記憶體函式;xmlstrcmp是字串比較函式等等。
基本上xmlchar字串相關函式都在xmlstring.h中定義;而動態記憶體分配函式在xmlmemory.h中定義。
2.3 xmlchar*與其它型別之間的轉換
另外要注意,因為總是要在xmlchar*和char*之間進行型別轉換,所以定義了乙個巨集bad_cast,其定義如下:xmlstring.h
#define bad_cast (xmlchar *)
原則上來說,unsigned char和char之間進行強制型別轉換是沒有問題的。
C 使用libxml解析XML檔案
opencv中使用filestorage建立和解析xml檔案。但filestorage不能處理節點為空的情況,且對屬性也不友好。例子見這裡。對於一段如下的xml檔案 1libxml處理的函式如下 string getlabes char szdocname,map,rect labels curno...
C 使用libxml解析XML檔案
opencv中使用filestorage建立和解析xml檔案。但filestorage不能處理節點為空的情況,且對屬性也不友好。例子見這裡。對於一段如下的xml檔案 1libxml處理的函式如下 string getlabes char szdocname,map,rect labels curno...
XML檔案的解析 libxml庫函式解釋
分類 xml 2011 09 16 11 38 4416人閱讀收藏 舉報xml 文件資料庫 語言工具 sql 解析xml文件 解析乙個xml文件,從中取出想要的資訊,例如節點中包含的文字,或者某個節點的屬性,其流程如下 用xmlreadfile函式讀出乙個文件指標doc 用xmldocgetroot...