1. 程式人生 > >libxml主要函式功能介紹

libxml主要函式功能介紹

許多事物符合80/20法則,libxml中也是20%的函式提供了80%的功能。下面的列表列出了libxml的主要函式及其用法說明。

1.   全域性函式說明

標頭檔案引用

xml2config --cflags

庫檔案引用

xml2config --libs

主要標頭檔案

parse.h

tree.h

xpath.h

簡單例程

Makefile:

INCLUDE=-I./ -I$HOME/include `xml2config --cflags`

LIBRARY=-L./ -L$HOME/lib `xml2config --libs`

*.c或*.cpp

#include <libxml/parse.h>

#include <libxml/tree.h>

#include <libxml/xpath.h>

函式功能

在分析XML資料是,去除空白字元。如果不去除空白字元,則這些字元也會被當做一個node來處理

函式介面

int  xmlKeepBlanksDefault(int val)

引數說明

val:0或者1。0表示去除空白字元,1表示不去除

返回值:0表示設定失敗,1表示設定成功,一般不用判斷

簡單例程

xmlKeepBlanksDefault(0);

2.   XML檔案載入和儲存函式

函式功能

將XML檔案從硬碟上載入到記憶體中,並且生成DOM樹。使用完畢之後,需要用xmlFreeDoc()來釋放資源

函式介面

xmlDocPtr xmlParseFile(const char * filename)

引數說明

filename:XML檔名稱。

返回值:如果載入成功,則返回這個文件的根節點。否則返回NULL

簡單例程

xmlDodPtr pdoc;

pdoc = xmlParseFile("123.xml");

if( pdoc == NULL )

{

     printf("Fail to parse XML file.\n");

}

函式功能

將記憶體中的DOM樹,儲存到硬碟上,生成一個帶格式的XML檔案

函式介面

int  xmlSaveFormatFileEnc(const char * filename,  xmlDocPtr cur,

     const char * encoding, int format)

引數說明

filename:需要儲存的檔案的名稱

cur:需要儲存的XML文件

encoding:匯出檔案的編碼型別,或者為NULL

format:是否格式化。0表示不格式化,1表示需要格式化。注意:只有當xmlIndentTreeOutput設定為1,或者xmlKeepBlanksDefault(0)時,format設定為1才能生效

返回值:寫入檔案中的位元組數量

簡單例程

xmlDodPtr pdoc;

pdoc = xmlParseFile("123.xml");

if( pdoc == NULL )

{

     printf("Fail to parse XML file.\n");

}

Do_something_with_pdoc();

int filesize;

filesize = xmlSaveFormatFileEnc("321.xml", pdoc, "gb2312",1);

if(filesize == -1)

{

     printf("Fail to save XML to file.\n");

}

3.   XML記憶體載入和輸出函式

函式功能

將一塊記憶體中的XML資料生成一個DOM樹。使用完畢之後,需要用xmlFreeDoc()來釋放資源

函式介面

xmlDocPtr xmlParseMemory(const char * buffer, int size)

引數說明

buffer:存放XML格式資料的記憶體區

size:記憶體中XML格式資料的長度

返回值:如果載入成功,則返回這個文件的根節點;否則返回NULL

簡單例程

char *buffer;

int size;

xmlDocPtr pdoc;

// read_data_to_buffer

buffer = ……

size = strlen(buffer);

pdoc = xmlParseMemory(buffer, size);

if( pdoc == NULL)

{

     printf("Fail to parse XML buffer.\n");

}

函式功能

將DOM樹匯出到記憶體中,形成一個XML格式的資料

函式介面

void xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc, xmlChar ** doc_txt_ptr,

     int * doc_txt_len, const char * txt_encoding, int format)

引數說明

out_doc:需要輸出成為一個buffer的XML文件

doc_txt_ptr:輸出文件的記憶體區。由該函式在內部申請。使用完成之後,必須呼叫xmlFree()函式來釋放該記憶體塊

doc_txt_len:輸出文件記憶體區的長度

txt_encoding:輸出文件的編碼型別

format:是否格式化。0表示不格式化,1表示需要格式化。注意只有當xmlIndentTreeOutput設定為1,或者xmlKeepBlanksDefault(0)時,format設定為1才能生效

簡單例程

xmlChar *outbuf;

int outlen;

xmlDocPtr pdoc;

pdoc = ……

xmlDocDumpFormatMemoryEnc(pdoc, &outbuf, &outlen, "gb2312", 1);

xmlFree(outbuf);

4.   建立和釋放XML文件函式

函式功能

在記憶體中建立一個新的XML文件。所建立的文件需要使用xmlFreeDoc()來釋放資源

函式介面

xmlDocPtr xmlNewDoc     (const xmlChar * version)

引數說明

version:XML標準的版本,目前只能指定為“1.0”

簡單例程

xmlDocPtr pdoc ;

pdoc = xmlNewDoc((const xmlChar*)"1.0");

if( pdoc == NULL )

{

     printf(“Fail to create new XML doc.\n”);

}

函式功能

釋放記憶體中的XML文件

函式介面

void xmlFreeDoc(xmlDocPtr cur)

引數說明

cur:需要釋放的XML文件

簡單例程

xmlDocPtr pdoc ;

pdoc = xmlNewDoc((const xmlChar*)"1.0");

if( pdoc == NULL )

{

     printf(“Fail to create new XML doc.\n”);

}

xmlFreeDoc(podc);

5.   XML節點操作函式

函式功能

獲得根節點

函式介面

xmlNodePtr    xmlDocGetRootElement(xmlDocPtr doc)

引數說明

doc:XML文件控制代碼。

返回值:XML文件的根節點,或者NULL。

使用流程

① 解析好文件的根節點指標,應用使用該指標可以遍歷XML檔案

② xmlNodePtr的next欄位,指向下一個同級XML節點

③ properties欄位為xmlAttr型別,指向該XML節點的屬性

④ children欄位為xmlNodePtr型別,指向該XML節點的子節點

簡單例程

xmlDocPtr pdoc ;

xmlNodePtr root ;

pdoc = xmlParseFile("123.xml");

if( pdoc == NULL )

{

     printf("Fail to parse XML File.\n");

     return ;

}

root = xmlDocGetRootElement(pdoc);

if( root == NULL)

{

     printf("Fail to get root element\n");

     return;

}

函式功能

設定根節點

函式介面

xmlNodePtr    xmlDocSetRootElement(xmlDocPtr doc, xmlNodePtr root)

引數說明

doc:XML文件控制代碼

root:XML文件的新的根節點

返回值:如果該文件原來有根節點,則返回根節點,否則返回NULL

簡單例程

xmlDocPtr pdoc ;

xmlNodePtr root;

pdoc = xmlNewDoc((const xmlChar*)"1.0");

if( pdoc == NULL )

{

     printf("Fail to create new XML doc.\n");

     return;

}

root = xmlNewDocNode(pdoc, NULL, (const xmlChar*)"root", NULL);

if( root == NULL )

{

     printf("Fail to create doc node.\n");

     return ;

}

xmlDocSetRootElement(pdoc, root);

函式功能

獲得節點的內容

函式介面

xmlChar * xmlNodeGetContent  (xmlNodePtr cur)

引數說明

cur:節點的指標

返回值:節點的文字內容。如果該節點沒有文字內容,則返回NULL。當返回值不為NULL時,需要用xmlFree()函式來釋放返回的資源

簡單例程

xmlNodePtr node;

xmlChar* content;

node = ….

content = xmlNodeGetContent(node);

xmlFree(content);

函式功能

設定節點的內容長度

函式介面

void xmlNodeSetContentLen(xmlNodePtr cur, const xmlChar * content,  int len)

引數說明

cur:節點的指標

content:節點的新文字內容

len:節點新文字內容的長度

簡單例程

xmlNodePtr node;

xmlChar* content;

int len;

content = (xmlChar*)"1234567890";

len = strlen((char*)content);

xmlNodeSetContentLen(node, content, len);

函式功能

在節點的內容後面新增新的內容

函式介面

void xmlNodeAddContentLen(xmlNodePtr cur,  const xmlChar * content,  int len)

引數說明

cur:節點的指標

content:節點的新加的文字內容

len:節點新加的文字內容的長度

簡單例程

xmlNodePtr node;

xmlChar* content;

int len;

content = (xmlChar*)"1234567890";

len = strlen((char*)content);

xmlNodeAddContentLen(node, content, len);

函式功能

獲得節點的屬性

函式介面

xmlChar * xmlGetProp(xmlNodePtr node, const xmlChar * name)

引數說明

node:XML節點的指標

name:該節點的屬性的名稱

返回值:該屬性的值或者為NULL。如果不為NULL,則需要用xmlFree()來釋放資源

簡單例程

xmlNodePtr node;

xmlChar* prop;

node = ….

prop = xmlGetProp(node, (const xmlChar*)"name");

if( prop != NULL)

     xmlFree(prop);

函式功能

設定節點的屬性(如果該屬性已經存在,則替換其值)

函式介面

xmlAttrPtr xmlSetProp(xmlNodePtr node, const xmlChar * name, const xmlChar * value)

引數說明

node:需要設定屬性的節點

name:屬性的名稱

value:屬性的值

返回值:該屬性節點的指標

簡單例程

xmlNodePtr node;

xmlAttrPtr attr;

node = ….

attr = xmlSetProp(node, (cosnt xmlChar*)"Dept-Name", (const xmlChar*)"ES");

if( attr == NULL)

{

     printf("Fail to set prop of this node.\n");

}

6.   XPath函式

函式功能

生成xpath的上下文關係控制代碼

函式介面

xmlXPathContextPtr xmlXPathNewContext(xmlDocPtr doc)

引數說明

doc:需要處理的XML文件

返回值:該文件的XPath上下文關係控制代碼或者NULL。該返回控制代碼由函式內部申請,此函式呼叫者需要用xmlXPathFreeContext來釋放

簡單例程

xmlDocPtr pdoc;

xmlXPathContextPtr xpathctx;

pdoc = ….

xpathctx = xmlXPathNewContext(pdoc);

if( xpathctx != NULL)

     xmlXPathFreeContext(xpathctx);

函式功能

釋放xpath的上下文關係控制代碼

函式介面

void xmlXPathFreeContext(xmlXPathContextPtr ctxt)

引數說明

ctxt:需要釋放的xpath上下文關係控制代碼

簡單例程

參見xmlXPathNewContext()的例程

函式功能

執行xpath的表示式,返回結果內容節點集合

XPath表示式的表示方法,請參考:

http://www.zvon.org/xxl/XPathTutorial/General/examples.html

函式介面

xmlXPathObjectPtr  xmlXPathEvalExpression (const xmlChar * str,

                             xmlXPathContextPtr ctxt)

引數說明

str:xpath表示式

ctxt:xpath的上下文關係控制代碼

返回值:滿足表示式的結果集合或者為NULL。該返回控制代碼由函式內部申請,此函式呼叫者需要用xmlXPathFreeObject()來釋放

簡單例程

xmlDocPtr pdoc;

xmlXPathContextPtr xpathctx;

xmlXPathObjectPtr xpathobj;

pdoc = ….

xpathctx = xmlXPathNewContext(pdoc);

if( xpathctx == NULL)

{

     printf("Fail to create xpath context.\n");

     return ;

}

Xpathobj = xmlXPathEvalExpression(BAD_CAST "//@value", xpathctx);

if( xpathobj == NULL)

{

     printf("Fail to evaluate xpath expression.\n");

     xmlXPathFreeContext(xpathctx);

     return;

}

xmlXPathFreeObject(xpathobj);

xmlXPathFreeContext(xpathctx);

結果集說明:

xpathobj-> nodesetval:儲存結果列表,如果為NULL,表示無結果

xpathObj->nodesetval->nodeNr:表示結果的數量

xpathObj->nodesetval->nodeTab:表示結果的陣列,可以通過下標訪問

例如:

int number;

xmlNodePtr node;

if( xpathobj-> nodesetval == NULL)

     number = 0;

else

     number = xpathObj->nodesetval->nodeNr;

for(int i=0;i<number;i++)

{

     node = xpathObj->nodesetval->nodeTab[i];

     do_some_work_with_node();

}

函式功能

釋放xpath表示式運算結果集

函式介面

void xmlXPathFreeObject(xmlXPathObjectPtr obj)

引數說明

obj:需要釋放的xpath表示式運算結果集合

簡單例程

參見xmlXPathEvalExpression()的例程

7.   XML常見使用函式列表

下文是對XML常見使用函式的簡要說明,有些函式的具體說明見上面的表格。

<libxml/parser.h>

 int xmlKeepBlanksDefault (int val) //設定是否忽略空白節點,比如空格,在分析前必須呼叫,預設值是0,最好設定成1。

xmlDocPtr xmlParseFile (const char * filename) //分析一個xml檔案,並返回一個文件物件指標

<libxml/tree.h>

//xml操作的基礎結構提及其指標型別

//xmlDoc  xmlDocPtr 文件物件的結構體及其指標

//xmlNode xmlNodePtr 節點物件的結構體及其指標

//xmlAttr xmlAttrPtr 節點屬性的結構體及其指標

//xmlNs xmlNsPtr 節點名稱空間的結構及其指標

//根節點相關函式

xmlNodePtr xmlDocGetRootElement (xmlDocPtr doc) //獲取文件根節點

xmlNodePtr xmlDocSetRootElement (xmlDocPtr doc, xmlNodePtr root) //設定文件根節點

//建立子節點相關函式

xmlNodePtr xmlNewNode (xmlNsPtr ns, const xmlChar * name) //建立新節點

xmlNodePtr xmlNewChild (xmlNodePtr parent, xmlNsPtr ns, const xmlChar * name, const xmlChar * content) //建立新的子節點

xmlNodePtr xmlCopyNode (const xmlNodePtr node, int extended) //複製當前節點

//新增子節點相關函式

xmlNodePtr xmlAddChild (xmlNodePtr parent, xmlNodePtr cur) //給指定節點新增子節點

xmlNodePtr xmlAddNextSibling (xmlNodePtr cur, xmlNodePtr elem) //新增後一個兄弟節點

xmlNodePtr xmlAddPrevSibling (xmlNodePtr cur, xmlNodePtr elem) //新增前一個兄弟節點

xmlNodePtr xmlAddSibling (xmlNodePtr cur, xmlNodePtr elem) //新增兄弟節點

//屬性相關函式

xmlAttrPtr xmlNewProp (xmlNodePtr node, const xmlChar * name, const xmlChar * value) //建立新節點屬性

xmlChar * xmlGetProp (xmlNodePtr node, const xmlChar * name) //讀取節點屬性

xmlAttrPtr xmlSetProp (xmlNodePtr node, const xmlChar * name, const xmlChar * value) //設定節點屬性

//作用同尾部同名的字串函式。只不過針對相應的xml節點

xmlChar* xmlStrcat (xmlChar *cur, const xmlChar * add)

const xmlChar *xmlStrchr(const xmlChar * str, xmlChar val)

int xmlStrcmp (const xmlChar * str1, const xmlChar * str2)

int xmlStrlen (const xmlChar * str)

xmlChar *xmlStrncat (xmlChar * cur, const xmlChar * add, int len)

int xmlStrncmp (const xmlChar * str1, const xmlChar * str2, int len)

const xmlChar *xmlStrstr (const xmlChar * str, const xmlChar * val)

摘錄自《深入淺出Linux工具與程式設計》

相關推薦

libxml主要函式功能介紹

許多事物符合80/20法則,libxml中也是20%的函式提供了80%的功能。下面的列表列出了libxml的主要函式及其用法說明。1.   全域性函式說明標頭檔案引用xml2config --cflags庫檔案引用xml2config --libs主要標頭檔案parse.ht

Kubernets主要功能介紹、基本物件以及系統架構和元件功能

Kubernets主要功能 資料卷:     Pod中容器之間共享資料,可以使用資料卷; 應用程式件健康檢查:     容器內服務可能程序堵塞無法處理請求,可以設定監控檢查策略保證應用健壯性; 複製應用程式例項:     控制器維護者Pod副本數量,保證一個Pod或者

Kafka 0.11新版本釋出:主要功能變更介紹:支援 EOS, 事務和冪等producer

Apache Kafka近日推出0.11版本。這是一個里程碑式的大版本,特別是Kafka從這個版本開始支援“exactly-once”語義(下稱EOS, exactly-once semantics

Kubernetes 1.6新增主要功能介紹_Kubernetes中文社群

Kubernetes 1.6版已經發布一段時間了,在k8s1.6中新增包含Beta版本的RBAC機制,讓叢集管理員可以針對特定使用者、服務賬號,進行更精確的資源訪問控制。除此之外,新版本更讓叢集規模從2,000個,擴大至5,000個節點,比前一版多了2.5倍 先前Kubernetes在新版規畫

MT6139射頻處理器工作原理圖/晶片主要功能介紹

Receiver 接收機包括四波段低噪聲放大器(LNAs)、射頻正交混頻器、片上通道濾波器、可程式設計增益放大器(PGA)和直流偏置校準(DCOC)環路.加法一次工廠AM校準程式提前,MT 6139的IIP 2可以達到至少50 dBm的所有波段。完全整合的通道濾波器可以消除干擾,阻塞訊號,不需要

Marathon主要功能介紹(一)

【摘要】Marathon是一個成熟的,輕量級的,擴充套件性很強的Apache Mesos的容器編排框架,它主要用來排程和執行常駐服務(long-running service),提供了友好的介面和Rest API來建立和管理應用。Mesosphere在最近剛剛釋

SQL2000系統表、儲存過程、函式功能介紹及應用

----系統表---------------------------------------------------------------------------------------------------- 雖然使用系統儲存過程、系統函式與資訊架構檢視已經可以為我們提

SQL2000系統表、儲存過程、函式功能介紹及應用2009年01月21日 星期三 11:38雖然使用系統儲存過程、系統函式與資訊架構檢視已經可以為我們提供了相當豐富的元資料資訊,但是對於某些特殊的元資料資訊,我們仍然需要直接對系統表進行查詢。因為SQL

雖然使用系統儲存過程、系統函式與資訊架構檢視已經可以為我們提供了相當豐富的元資料資訊,但是對於某些特殊的元資料資訊,我們仍然需要直接對系統表進行查詢。因為SQL Server 將所有資料庫物件的資訊均存放在系統表中,作為 SQL Server 的管理、開發人員,瞭解各個系統表的作用將有助於我們瞭解 SQL

miniupnpc的主要函式介紹

http://blog.163.com/miky_sun/blog/static/336940520105954733836/ 1.miniupnpc庫主要使用的標頭檔案有 #include "miniwget.h"#include "miniupnpc.h"#include "upnpcomman

ossec主要功能介紹

Ossec 主要功能 OSSEC是一個開源的入侵檢測系統,它可以執行LOG分析,完整性檢測 ,windows登錄檔監控,rootkit檢測,實時報警及動態響影。 完整性檢測 Syscheck是OSSEC內部完整性檢測程序的名稱。它週期性檢查是否有任何

站大爺代理IP工具主要功能介紹

隨機 批量驗證 功能 版本 更新 很多 在哪裏 字符 提取 親愛的朋友們,歡迎您使用站大爺代理IP工具,這款軟件是永久免費的。目前站大爺代理IP工具最新版本是V3.3,已經更新出來很久了。最近還有很多朋友聯系客服說使用工具遇到了問題,經過溝通了解,用的還是以前的V3.1版本

Kafka 0.11版本新功能介紹 —— 空消費組延時rebalance

次數 新功能 ins 效果 可控 size style soft font   在0.11之前的版本中,多個consumer實例加入到一個空消費組將導致多次的rebalance,這是由於每個consumer instance啟動的時間不可控,很有可能超出coordinato

redis3.0 cluster功能介紹

jpeg 標識符 rms 代理 更新數據 bitmap 查詢 c51 想要 edis從3.0開始支持集群功能。redis集群采用無中心節點方式實現,無需proxy代理,客戶端直接與redis集群的每個節點連接,根據同樣的hash算法計算出key對應的slot,然後直接在sl

JavaWeb網上圖書商城完整項目--day03-1.圖書模塊功能介紹及相關類創建

class default package ren 書籍 logs main java getc 1 前兩天我們學習了user用戶模塊和圖書的分類模塊,接下來我們學習圖書模塊 圖書模塊的功能主要是下面的功能: 2 接下來我們創建對應的包 我們來看看對應的數據庫表t_bo

水果拼團小程序平臺功能介紹

水果拼團小程序 水果拼團小程序平臺是基於小程序開發的一種商城,無需開發APP,操作比較便捷,通過手機掃描二維碼即可運用小程序,功能比較豐富。水果拼團小程序平臺商品、商品分類等頁面自帶二維碼,用戶通過掃描直接進入商城購物,方便快捷,提高客戶的二次消費率。水果拼團小程序平臺不但具有商品展示的功能,而且還具有完

Apache Flink 1.3.0正式發布及其新功能介紹

space str either update sse ant 新功能 sid ask 下面文檔是今天早上翻譯的,因為要上班,時間比較倉促,有些部分沒有翻譯,請見諒。 2017年06月01日兒童節 Apache Flink 社區正式發布了 1.3.0 版本。此版本經歷了四個

建材O2O防偽管理系統功能介紹和優勢

建材O2O防偽管理 建材產品造假現象屢禁不止,原因可能是消費者對於建材知識欠缺,加上企業監管不到位,以至於被不良商家盯上。建材企業如何避免這種現象的發生,讓消費者對企業恢復信心。 建材O2O防偽管理系統怎麽應用 建材O2O防偽管理系統,用戶通過微信掃一掃功能識別二維碼,直接關註品

astgo-阿斯特完整功能介紹

統計 任務 sip g.729 保持 綁定 客戶端 用戶 模塊 核心功能: Astgo最核心和強大的功能是呼叫中心模塊。接入方式:中繼卡、模擬卡接入,中繼網關、O口網關接入、網絡IP接入等。單機200個坐席,通話實時錄音、靈活隊列分組。開放式IVR設計,修改業務邏輯和流程方

Guitar Pro新功能介紹-後面放大招!

Guitar Pro新功能 Guitar Pro下載 Guitar Pro是一款非常適合初學作曲又是吉他初學者的朋友們使用的編曲軟件,很多朋友使用Guitar Pro已經有很多年了,從GTP3、GTP4、GTP5、GTP6,一直到現在的GTP7,隨著Guitar Pro 7的來勢兇猛,不少小夥伴

python裏int內部功能介紹

pytho 增加 ima 部分 運行 src ges ont int bit_length() #用二進制數表示10進制數時,二進制的最少的位數(長度) 列如: 2用二進制表示為 00000010 10 使用bit_ength()就表示長度為1位,它會把前面的0自