天天看点

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

}