日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux下libxml2编程基础

發布時間:2023/12/20 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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     ?//開始編譯

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


三、libxml2常用數據類型
  xmlChar是libxml2中的字符類型,在庫中的所有字符,字符串都是基于這個數據類型的。

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

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

  ? xmlNode、xmlNodePtr ?//節點對象結構體及節點指針
  ? xmlAttr、xmlAttrPtr  //節點屬性的結構體及其指針
  xmlNs、xmlNsPtr   ? ?//節點命名空間的結構及指針

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


四、libxml2常用函數
1、文檔相關函數
  int ?xmlKeepBlankDefault(int ?val);    //設置是否忽略空白的節點,在解析之前一般要調用,默認值為0,最好設置成為1
  xmlDocPtr ?xmlParseFile(const ?*filename);  //分析一個xml文件,并返回一個xml文檔的對象指針
  xmlReadFile  //讀入一個帶有某種編碼的xml文檔,并返回一個文檔指針
  xmlSaveFile  //將文檔以默認方式保存
  xmlSaveFormatFileEnc  //可將文檔以某種編碼/格式的方式進行保存

  xmlFreeDoc  //釋放文檔指針  注意:當調用此函數時,該文檔所包含的所有節點內存都將被自動釋放。一般來說,一個文檔中所有節點都應該動態分配然后加入文檔,然后調用xmlFreeDoc函數一次性的釋放所有節點動態分配的內存;但是當節點從文檔中移除時,就需要調用xmlFreeNode或者是xmlFreeNodeList了。


2、根節點相關函數
  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  //獲取字符串


4、添加子節點相關函數
  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编程基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。