XML檔案的解析 libxml庫函式解釋

2021-07-04 05:17:24 字數 1841 閱讀 6929

分類: xml

2011-09-16 11:38

4416人閱讀收藏 

舉報xml

文件資料庫

語言工具

sql

解析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之間進行強制型別轉換是沒有問題的。

linux常用c函式-日期時間篇

libxml2庫使用指南

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文件 解析乙個xml文件,從中取出想要的資訊,例如節點中包含的文字,或者某個節點的屬性,其流程如下 用xmlreadfile函式讀出乙個文件指標doc 用xmldocgetrootelement函式得到根節點curnode curnode xmlchildrennode就是根節點的子節點集...