libxml2編程基礎


  最近工作中用到了libxml2編程的知識,但是以前都不怎么熟悉過,所以看了些資料,在此做個記錄,總結下,呵呵。

一、libxml2的簡介  

  xml是一個實現讀、創建、以及操作xml數據功能的C語言庫。並且支持XPATH查詢,以及部分的支持XSLT轉換等的功能。

  libxml2的下載地址為ftp://xmlsoft.org/libxml2/,完全版的庫是開源的,並且帶有例子的程序和說明文檔。有rpm包格式,也有tar包的形式,可以下載下來自己編譯安裝。

  libxml2包含了一個腳本xml2-config,非常的方便。它一般用來編譯和鏈接程序到庫時產生的標志。為了取得預處理和編譯標志,可以使用xml2-config --cflags、為了取得鏈接標志時可用xml2-config --libs。其他的有效參數可以使用xml2-config --help進行查閱,其兩條命令的執行結果如下所示:

 

          

二、libxml2的編譯安裝

  我是下載libxml2-2.8.0.tar.gz的包,先將壓縮包進行解壓,進入到libxml2-2.8.0目錄,然后進行源碼安裝的三部曲,做如下操作:

  1、./configure  //運行配置腳本文件,配置編譯環境

  2、make      //開始編譯

  3、make install    //結束之后libxml2即可安裝完成

三、libxml2常用數據類型

  xmlChar是libxml2中的字符類型,在庫中的所有字符,字符串都是基於這個數據類型的。

  xmlChar *是指針類型,很多函數都會返回一個動態分配內存的xmlChar *類型的變量,因此,在使用這類函數是要記得釋放內存,否則會導致內存泄漏,例如這樣的用法:

     

  xmlDoc、xmlDocPtr   //文檔對象結構體及指針

    xmlNode、xmlNodePtr  //節點對象結構體及節點指針

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

  xmlNs、xmlNsPtr      //節點命名空間的結構及指針

  BAD_CAST        //一個宏定義,事實上它即是xmlChar *類型

四、libxml2常用函數

  一、文檔相關函數

      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); //設置文檔的根節點

  三、創建子節點相關函數

    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); //添加一個兄弟節點

  五、屬性相關函數

    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); //讀取節點屬性

  六、使用XPATH查找xml文檔

    使用XPATH的流程如下:

    1、定義一個XPATH的上下文指針xmlXPathContextPtr context,並且使用函數xmlXPathNewContext來初始化該指針;

    2、定義一個XPATH的對象指針xmlXPathObjectPtr obj,並使用函數xmlXPathEvalExpression來計算XPATH的表達式,得到查詢結果,將結果存入對象指針當中;

    3、使用obj->nodesetval得到節點集合指針,在其中包含了所有查詢到的XPATH節點;

    4、使用函數xmlXPathFreeContext來釋放上下文指針;

    5、最后使用函數xmlXPathFreeObject釋放XPATH對象指針。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM