天天看點

C語言libxml用法,使用C語言解析xml之libxml2

一、解析XML

xmlDocPtrxmlParseFile(const char *

filename);

功能:解析一個XML檔案并且生成樹。

參數:filename,要解析的xml檔案

傳回值:如果檔案合格,傳回指向XML樹的指針;

否則,傳回NULL;

xmlDocPtrxmlReadFile(const char * filename, const char *

encoding,  int options)

功能:解析一個來自檔案系統或者網絡的xml檔案。

參數:filename,一個檔案名稱或者URL

encoding,檔案的編碼格式或者NULL

options,xml檔案解析參數(組合)

傳回值:隻想XML樹的指針或者NULL

xmlDocPtrxmlRecoverFile(const char *

filename)

功能:同xmlParseFile,隻是當檔案的格式并不正确的時候xmlRecoverFile無論如何仍會試圖建立一棵樹。

參數:同xmlParseFile

傳回值:同xmlParseFile

二、建立和釋放xmlDocPtr

xmlDocPtrxmlNewDoc(const xmlChar *

version)

功能:建立一個新的XML文檔

參數:使用xmlChar類型指定xml文檔的版本,例如

xmlDocPtr doc = xmlNewDoc(BAD_CAST

"1.0");

傳回值:一個新的xml文檔

void xmlFreeDoc(xmlDocPtr cur)

功能:釋放一個XML文檔中的所有結構,包括tree。

參數:一個XML文檔

傳回值:無

三、擷取和設定root借點

xmlNodePtrxmlDocGetRootElement(xmlDocPtr

doc)

功能:擷取XML文檔的root節點

參數:XML文檔

傳回值:XML文檔的root節點或者NULL

xmlNodePtrxmlDocSetRootElement(xmlDocPtr

doc,xmlNodePtr root)

功能:設定XML文檔的root節點。

參數:doc,xml文檔

root,要被設定為root的xml節點

傳回值:傳回原來的root節點,如果原來沒有root節點則傳回NULL。

四、建立、擷取添加子節點

xmlNodePtr  xmlNewChild  (xmlNodePtr

parent,  xmlNsPtr ns,  const xmlChar * name,  const xmlChar *

content)

功能:建立一個新的子節點并添加到父節點的節點連結清單的末端,ns和content是可選的。

參數:parent,父節點

ns,目前還不明确

name,建立子節點的名稱

content,建立子節點的内容

傳回值:指向新節點的指針

xmlNodePtrxmlFirstElementChild(xmlNodePtr

parent)

功能:擷取一個節點的首個子節點。

參數:父節點指針

傳回值:第一個子節點的指針或者NULL

xmlNodePtr  xmlLastElementChild(xmlNodePtr parent)

功能:擷取一個節點的最後一個子節點

參數:父節點指針

傳回值:最後一個子節點的指針或者NULL

xmlNodePtr  xmlAddChild  (xmlNodePtr

parent,  xmlNodePtr cur)

功能:給父節點添加一個新的子節點,該子節點被添加到子節點連結清單的尾部。

參數:parent,父節點

cur,子節點

傳回值:傳回子節點或者NULL

五、建立、設定、擷取、删除屬性

xmlAttrPtr  xmlNewProp(xmlNodePtr node,  const xmlChar *

name,  const xmlChar * value)

功能:為一個節點建立一個屬性

參數:node,節點

name,屬性名稱

value,屬性的值

傳回值:指向建立屬性的指針

xmlAttrPtrxmlSetProp(xmlNodePtr node,const xmlChar * name,const xmlChar * value)功能:設定一個節點的屬性值。

參數:node,節點指針

name,屬性名稱

value,屬性值

傳回值:被設定的屬性的指針

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

功能:根據屬性名稱擷取一個節點的屬性。

參數:node,被擷取的節點

name,要擷取的屬性名稱

傳回值:屬性的值

voidxmlFreeProp(xmlAttrPtr cur)

功能:釋放一個屬性結構

參數:cur,要釋放屬性

傳回值:無

六、設定、擷取節點内容content

voidxmlNodeSetContent(xmlNodePtr

cur,const xmlChar * content)

功能:替換節點的内容

參數:cur,節點指針

content,要設定的content

傳回值:無

xmlChar * xmlNodeGetContent(xmlNodePtr cur)

功能:擷取一個節點的内容

參數:cur,節點指針

傳回值:節點的content或者NULL,傳回的内容需要手動釋放。

七、建立和删除節點

xmlNodePtrxmlNewNode(xmlNsPtr ns,const xmlChar * name)

功能:建立一個新節點

參數:ns,目前還不明确

name,節點名稱

傳回值:傳回一個執行新節點的指針

void  xmlUnlinkNode  (xmlNodePtr cur)

功能:解除一個節點與它的目前上下文的連結,節點沒有被釋放,如果需要自由節點後,取消使用xmlfreenode()正常釋放它。請注意,命名空間節點不能被解除,因為他們沒有他們的父節點的指針。

參數:節點指針

傳回值:無

voidxmlFreeNode (xmlNodePtr cur)

功能:釋放一個節點,這是一個遞歸行為,所有的位元組點也将被釋放,該函數并沒有接觸子節點與連結清單的關聯,是以需要先使用xmlUnlinkNode()函數接觸關聯。

參數:節點指針

傳回值:無

八、建立兄弟節點sibling

xmlNodePtrxmlAddNextSibling(xmlNodePtr

cur,xmlNodePtr elem)

功能:在指定節點的後面添加一個兄弟節點

參數:cur,指定節點

elem,下一個兄弟節點

傳回值:指向新節點的指針或者NULL

九、寫入xml檔案

intxmlSaveFile(const char *

filename,xmlDocPtr cur)

功能:寫一個XML文檔到指定的檔案中

參數:filename,檔案名稱

cur,文檔指針

傳回值:如果成功則傳回寫入的位元組數,否則傳回-1.

int  xmlSaveFileEnc  (const char *

filename,  xmlDocPtr cur,  const char * encoding)

功能:寫一個XML文檔到指定的檔案中,并且轉換檔案編碼格式為制定的格式。

參數:filename,檔案名稱

cur,文檔指針

encoding,指定的編碼格式

傳回值:如果成功則傳回寫入的位元組數,否則傳回-1.

十、資料結構xmlNode

Structure xmlNode

struct _xmlNode {

void *_private: application data

type: type number, must be second !

const *name: the name of the node, or the entity

struct _xmlNode *children: parent->childs link

struct _xmlNode *last: last child link

struct _xmlNode *parent: child->parent link

struct _xmlNode *next: next sibling link

struct _xmlNode *prev: previous sibling link

struct _xmlDoc *doc: the containing document End of common p

*ns: pointer to the associated namespace

*content : the content

struct _xmlAttr *properties: properties list

*nsDef: namespace definitions on this node

void *psvi: for type/PSVI informations

unsigned shortline: line number

unsigned shortextra: extra data for XPath/XSLT

}