Linux下libxml2编程基础
生活随笔
收集整理的這篇文章主要介紹了
Linux下libxml2编程基础
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Linux下libxml2編程基礎
一、libxml2的簡介
xml是一個實現讀、創建、以及操作xml數據功能的C語言庫。并且支持XPATH查詢,以及部分的支持XSLT轉換等的功能。
libxml2的下載地址為ftp://xmlsoft.org/libxml2/,完全版的庫是開源的,并且帶有例子的程序和說明文檔。有rpm包格式,也有tar包的形式,可以下載下來自己編譯安裝。
二、libxml2的編譯安裝
我是下載libxml2-7.8.0.tar.gz的包,先將壓縮包進行解壓,進入到libxml2-7.8.0目錄,安裝如下:
1、./configure //運行配置腳本文件,配置編譯環境
2、make ?//開始編譯
xmlChar是libxml2中的字符類型,在庫中的所有字符,字符串都是基于這個數據類型的。
? xmlAttr、xmlAttrPtr //節點屬性的結構體及其指針
xmlNs、xmlNsPtr ? ?//節點命名空間的結構及指針
1、文檔相關函數
int ?xmlKeepBlankDefault(int ?val); //設置是否忽略空白的節點,在解析之前一般要調用,默認值為0,最好設置成為1
xmlDocPtr ?xmlParseFile(const ?*filename); //分析一個xml文件,并返回一個xml文檔的對象指針
xmlReadFile //讀入一個帶有某種編碼的xml文檔,并返回一個文檔指針
xmlSaveFile //將文檔以默認方式保存
xmlSaveFormatFileEnc //可將文檔以某種編碼/格式的方式進行保存
xmlNodePtr ?xmlDocGetRootElement(xmlDocPtr ?doc); //獲得文檔的根節點
xmlNodePtr ?xmlNewChild(xmlNodePtr ?parent, ?xmlNsPtr ns, ?const ?xmlChar *name, const ?xmlChar *content); //創建一個新的子節點
? ? ? ? xmlNodePtr xmlCopyNode(const ?xmlNodePtr ?curNode, ?int ?extended); //復制當前節點
xmlNodeSetContent //設置節點內容
xmlNodeGetContent //獲取節點內容
xmlNodePtr xmlAddChild(xmlNodePtr ?parent, ?xmlNodePtr ?curNode); //給指定的節點添加子節點
xmlNodePtr xmlAddNextSibling(xmlNodePtr ?curNode, ?xmlNodePtr ?brother); //添加兄弟節點到后面
xmlNodePtr xmlAddPrevSibling(xmlNodePtr ?curNode, ?xmlNodePtr brother); //添加兄弟節點到前面
xmlNodePtr xmlAddSibling(xmlNodePtr ?curNode, ?xmlNodePtr ?brother); //添加一個兄弟節點
5、屬性相關函數
? ?xmlAttrPtr xmlNewProp(xmlNodePtr ?curNode, const ?xmlChar *name, ?const ?xmlChar ?*value); //創建信節點屬性
? ? ? ? xmlAttrPtr xmlNewProp(xmlNodePtr ?curNode, const ?xmlChar ?*name, ?const ?xmlChar ?*value); //設置新節點屬性
xmlChar *xmlGetProp(xmlNodePtr ?curNode, ?const ?xmlChar ?*name); //讀取節點屬性
6、使用XPATH查找xml文檔
使用XPATH的流程如下:
(1)、定義一個XPATH的上下文指針xmlXPathContextPtr context,并且使用函數xmlXPathNewContext來初始化該指針;
(2)、定義一個XPATH的對象指針xmlXPathObjectPtr obj,并使用函數xmlXPathEvalExpression來計算XPATH的表達式,得到查詢結果,將結果存入對象指針當中;
(3)、使用obj->nodesetval得到節點集合指針,在其中包含了所有查詢到的XPATH節點;
(4)、使用函數xmlXPathFreeContext來釋放上下文指針;
(5)、最后使用函數xmlXPathFreeObject釋放XPATH對象指針。
一、libxml2的簡介
xml是一個實現讀、創建、以及操作xml數據功能的C語言庫。并且支持XPATH查詢,以及部分的支持XSLT轉換等的功能。
libxml2的下載地址為ftp://xmlsoft.org/libxml2/,完全版的庫是開源的,并且帶有例子的程序和說明文檔。有rpm包格式,也有tar包的形式,可以下載下來自己編譯安裝。
二、libxml2的編譯安裝
我是下載libxml2-7.8.0.tar.gz的包,先將壓縮包進行解壓,進入到libxml2-7.8.0目錄,安裝如下:
1、./configure //運行配置腳本文件,配置編譯環境
2、make ?//開始編譯
3、make install ? ?//結束之后libxml2即可安裝完成
xmlChar是libxml2中的字符類型,在庫中的所有字符,字符串都是基于這個數據類型的。
xmlChar *指針類型,很多函數都會返回一個動態分配內存的xmlChar *類型的變量,因此在使用這類函數是要記得釋放內存,否則會導致內存泄漏。
xmlDoc、xmlDocPtr //文檔對象結構體及指針
? xmlNode、xmlNodePtr ?//節點對象結構體及節點指針? xmlAttr、xmlAttrPtr //節點屬性的結構體及其指針
xmlNs、xmlNsPtr ? ?//節點命名空間的結構及指針
BAD_CAST ?//一個宏定義,事實上它即是xmlChar *類型
1、文檔相關函數
int ?xmlKeepBlankDefault(int ?val); //設置是否忽略空白的節點,在解析之前一般要調用,默認值為0,最好設置成為1
xmlDocPtr ?xmlParseFile(const ?*filename); //分析一個xml文件,并返回一個xml文檔的對象指針
xmlReadFile //讀入一個帶有某種編碼的xml文檔,并返回一個文檔指針
xmlSaveFile //將文檔以默認方式保存
xmlSaveFormatFileEnc //可將文檔以某種編碼/格式的方式進行保存
xmlFreeDoc //釋放文檔指針 注意:當調用此函數時,該文檔所包含的所有節點內存都將被自動釋放。一般來說,一個文檔中所有節點都應該動態分配然后加入文檔,然后調用xmlFreeDoc函數一次性的釋放所有節點動態分配的內存;但是當節點從文檔中移除時,就需要調用xmlFreeNode或者是xmlFreeNodeList了。
xmlNodePtr ?xmlDocGetRootElement(xmlDocPtr ?doc); //獲得文檔的根節點
xmlNodePtr ?xmlDocSetRootElement(xmlDocPtr ?doc, ?xmlNodePtr ?root); //設置文檔的根節點
3、創建子節點相關函數
xmlNodePtr ?xmlNewNode(xmlNsPtr ?ns, ?const ?xmlChar *name); ?//創建一個新節點xmlNodePtr ?xmlNewChild(xmlNodePtr ?parent, ?xmlNsPtr ns, ?const ?xmlChar *name, const ?xmlChar *content); //創建一個新的子節點
? ? ? ? xmlNodePtr xmlCopyNode(const ?xmlNodePtr ?curNode, ?int ?extended); //復制當前節點
xmlNodeSetContent //設置節點內容
xmlNodeGetContent //獲取節點內容
xmlNodeListGetString //獲取字符串
xmlNodePtr xmlAddChild(xmlNodePtr ?parent, ?xmlNodePtr ?curNode); //給指定的節點添加子節點
xmlNodePtr xmlAddNextSibling(xmlNodePtr ?curNode, ?xmlNodePtr ?brother); //添加兄弟節點到后面
xmlNodePtr xmlAddPrevSibling(xmlNodePtr ?curNode, ?xmlNodePtr brother); //添加兄弟節點到前面
xmlNodePtr xmlAddSibling(xmlNodePtr ?curNode, ?xmlNodePtr ?brother); //添加一個兄弟節點
5、屬性相關函數
? ?xmlAttrPtr xmlNewProp(xmlNodePtr ?curNode, const ?xmlChar *name, ?const ?xmlChar ?*value); //創建信節點屬性
? ? ? ? xmlAttrPtr xmlNewProp(xmlNodePtr ?curNode, const ?xmlChar ?*name, ?const ?xmlChar ?*value); //設置新節點屬性
xmlChar *xmlGetProp(xmlNodePtr ?curNode, ?const ?xmlChar ?*name); //讀取節點屬性
6、使用XPATH查找xml文檔
使用XPATH的流程如下:
(1)、定義一個XPATH的上下文指針xmlXPathContextPtr context,并且使用函數xmlXPathNewContext來初始化該指針;
(2)、定義一個XPATH的對象指針xmlXPathObjectPtr obj,并使用函數xmlXPathEvalExpression來計算XPATH的表達式,得到查詢結果,將結果存入對象指針當中;
(3)、使用obj->nodesetval得到節點集合指針,在其中包含了所有查詢到的XPATH節點;
(4)、使用函數xmlXPathFreeContext來釋放上下文指針;
(5)、最后使用函數xmlXPathFreeObject釋放XPATH對象指針。
總結
以上是生活随笔為你收集整理的Linux下libxml2编程基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 下载mooc视频字幕
- 下一篇: linux vi 回到命令行,linux