http://blog.csdn.net/hanchaoman/article/details/42557195

许多事物符合80/20法则,libxml中也是20%的函数提供了80%的功能。下面的列表列出了libxml的主要函数及其用法说明。

1.   全局函数说明

头文件引用

xml2config --cflags

库文件引用

xml2config --libs

主要头文件

parse.h

tree.h

xpath.h

简单例程

Makefile:

INCLUDE=-I./ -I$HOME/include `xml2config --cflags`

LIBRARY=-L./ -L$HOME/lib `xml2config --libs`

*.c或*.cpp

#include <libxml/parse.h>

#include <libxml/tree.h>

#include <libxml/xpath.h>

函数功能

在分析XML数据是,去除空白字符。如果不去除空白字符,则这些字符也会被当做一个node来处理

函数接口

int  xmlKeepBlanksDefault(int val)

参数说明

val:0或者1。0表示去除空白字符,1表示不去除

返回值:0表示设置失败,1表示设置成功,一般不用判断

简单例程

xmlKeepBlanksDefault(0);

2.   XML文件载入和保存函数

函数功能

将XML文件从硬盘上载入到内存中,并且生成DOM树。使用完毕之后,需要用xmlFreeDoc()来释放资源

函数接口

xmlDocPtr xmlParseFile(const char * filename)

参数说明

filename:XML文件名称。

返回值:如果载入成功,则返回这个文档的根节点。否则返回NULL

简单例程

xmlDodPtr pdoc;

pdoc = xmlParseFile("123.xml");

if( pdoc == NULL )

{

printf("Fail to parse XML file.\n");

}

函数功能

将内存中的DOM树,保存到硬盘上,生成一个带格式的XML文件

函数接口

int  xmlSaveFormatFileEnc(const char * filename,  xmlDocPtr cur,

const char * encoding, int format)

参数说明

filename:需要保存的文件的名称

cur:需要保存的XML文档

encoding:导出文件的编码类型,或者为NULL

format:是否格式化。0表示不格式化,1表示需要格式化。注意:只有当xmlIndentTreeOutput设置为1,或者xmlKeepBlanksDefault(0)时,format设置为1才能生效

返回值:写入文件中的字节数量

简单例程

xmlDodPtr pdoc;

pdoc = xmlParseFile("123.xml");

if( pdoc == NULL )

{

printf("Fail to parse XML file.\n");

}

Do_something_with_pdoc();

int filesize;

filesize = xmlSaveFormatFileEnc("321.xml", pdoc, "gb2312",1);

if(filesize == -1)

{

printf("Fail to save XML to file.\n");

}

3.   XML内存载入和输出函数

函数功能

将一块内存中的XML数据生成一个DOM树。使用完毕之后,需要用xmlFreeDoc()来释放资源

函数接口

xmlDocPtr xmlParseMemory(const char * buffer, int size)

参数说明

buffer:存放XML格式数据的内存区

size:内存中XML格式数据的长度

返回值:如果载入成功,则返回这个文档的根节点;否则返回NULL

简单例程

char *buffer;

int size;

xmlDocPtr pdoc;

// read_data_to_buffer

buffer = ……

size = strlen(buffer);

pdoc = xmlParseMemory(buffer, size);

if( pdoc == NULL)

{

printf("Fail to parse XML buffer.\n");

}

函数功能

将DOM树导出到内存中,形成一个XML格式的数据

函数接口

void xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc, xmlChar ** doc_txt_ptr,

int * doc_txt_len, const char * txt_encoding, int format)

参数说明

out_doc:需要输出成为一个buffer的XML文档

doc_txt_ptr:输出文档的内存区。由该函数在内部申请。使用完成之后,必须调用xmlFree()函数来释放该内存块

doc_txt_len:输出文档内存区的长度

txt_encoding:输出文档的编码类型

format:是否格式化。0表示不格式化,1表示需要格式化。注意只有当xmlIndentTreeOutput设置为1,或者xmlKeepBlanksDefault(0)时,format设置为1才能生效

简单例程

xmlChar *outbuf;

int outlen;

xmlDocPtr pdoc;

pdoc = ……

xmlDocDumpFormatMemoryEnc(pdoc, &outbuf, &outlen, "gb2312", 1);

xmlFree(outbuf);

4.   创建和释放XML文档函数

函数功能

在内存中创建一个新的XML文档。所创建的文档需要使用xmlFreeDoc()来释放资源

函数接口

xmlDocPtr xmlNewDoc     (const xmlChar * version)

参数说明

version:XML标准的版本,目前只能指定为“1.0”

简单例程

xmlDocPtr pdoc ;

pdoc = xmlNewDoc((const xmlChar*)"1.0");

if( pdoc == NULL )

{

printf(“Fail to create new XML doc.\n”);

}

函数功能

释放内存中的XML文档

函数接口

void xmlFreeDoc(xmlDocPtr cur)

参数说明

cur:需要释放的XML文档

简单例程

xmlDocPtr pdoc ;

pdoc = xmlNewDoc((const xmlChar*)"1.0");

if( pdoc == NULL )

{

printf(“Fail to create new XML doc.\n”);

}

xmlFreeDoc(podc);

5.   XML节点操作函数

函数功能

获得根节点

函数接口

xmlNodePtr    xmlDocGetRootElement(xmlDocPtr doc)

参数说明

doc:XML文档句柄。

返回值:XML文档的根节点,或者NULL。

使用流程

① 解析好文档的根节点指针,应用使用该指针可以遍历XML文件

② xmlNodePtr的next字段,指向下一个同级XML节点

③ properties字段为xmlAttr类型,指向该XML节点的属性

④ children字段为xmlNodePtr类型,指向该XML节点的子节点

简单例程

xmlDocPtr pdoc ;

xmlNodePtr root ;

pdoc = xmlParseFile("123.xml");

if( pdoc == NULL )

{

printf("Fail to parse XML File.\n");

return ;

}

root = xmlDocGetRootElement(pdoc);

if( root == NULL)

{

printf("Fail to get root element\n");

return;

}

函数功能

设置根节点

函数接口

xmlNodePtr    xmlDocSetRootElement(xmlDocPtr doc, xmlNodePtr root)

参数说明

doc:XML文档句柄

root:XML文档的新的根节点

返回值:如果该文档原来有根节点,则返回根节点,否则返回NULL

简单例程

xmlDocPtr pdoc ;

xmlNodePtr root;

pdoc = xmlNewDoc((const xmlChar*)"1.0");

if( pdoc == NULL )

{

printf("Fail to create new XML doc.\n");

return;

}

root = xmlNewDocNode(pdoc, NULL, (const xmlChar*)"root", NULL);

if( root == NULL )

{

printf("Fail to create doc node.\n");

return ;

}

xmlDocSetRootElement(pdoc, root);

函数功能

获得节点的内容

函数接口

xmlChar * xmlNodeGetContent  (xmlNodePtr cur)

参数说明

cur:节点的指针

返回值:节点的文本内容。如果该节点没有文本内容,则返回NULL。当返回值不为NULL时,需要用xmlFree()函数来释放返回的资源

简单例程

xmlNodePtr node;

xmlChar* content;

node = ….

content = xmlNodeGetContent(node);

xmlFree(content);

函数功能

设置节点的内容长度

函数接口

void xmlNodeSetContentLen(xmlNodePtr cur, const xmlChar * content,  int len)

参数说明

cur:节点的指针

content:节点的新文本内容

len:节点新文本内容的长度

简单例程

xmlNodePtr node;

xmlChar* content;

int len;

content = (xmlChar*)"1234567890";

len = strlen((char*)content);

xmlNodeSetContentLen(node, content, len);

函数功能

在节点的内容后面添加新的内容

函数接口

void xmlNodeAddContentLen(xmlNodePtr cur,  const xmlChar * content,  int len)

参数说明

cur:节点的指针

content:节点的新加的文本内容

len:节点新加的文本内容的长度

简单例程

xmlNodePtr node;

xmlChar* content;

int len;

content = (xmlChar*)"1234567890";

len = strlen((char*)content);

xmlNodeAddContentLen(node, content, len);

函数功能

获得节点的属性

函数接口

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

参数说明

node:XML节点的指针

name:该节点的属性的名称

返回值:该属性的值或者为NULL。如果不为NULL,则需要用xmlFree()来释放资源

简单例程

xmlNodePtr node;

xmlChar* prop;

node = ….

prop = xmlGetProp(node, (const xmlChar*)"name");

if( prop != NULL)

xmlFree(prop);

函数功能

设置节点的属性(如果该属性已经存在,则替换其值)

函数接口

xmlAttrPtr xmlSetProp(xmlNodePtr node, const xmlChar * name, const xmlChar * value)

参数说明

node:需要设置属性的节点

name:属性的名称

value:属性的值

返回值:该属性节点的指针

简单例程

xmlNodePtr node;

xmlAttrPtr attr;

node = ….

attr = xmlSetProp(node, (cosnt xmlChar*)"Dept-Name", (const xmlChar*)"ES");

if( attr == NULL)

{

printf("Fail to set prop of this node.\n");

}

6.   XPath函数

函数功能

生成xpath的上下文关系句柄

函数接口

xmlXPathContextPtr xmlXPathNewContext(xmlDocPtr doc)

参数说明

doc:需要处理的XML文档

返回值:该文档的XPath上下文关系句柄或者NULL。该返回句柄由函数内部申请,此函数调用者需要用xmlXPathFreeContext来释放

简单例程

xmlDocPtr pdoc;

xmlXPathContextPtr xpathctx;

pdoc = ….

xpathctx = xmlXPathNewContext(pdoc);

if( xpathctx != NULL)

xmlXPathFreeContext(xpathctx);

函数功能

释放xpath的上下文关系句柄

函数接口

void xmlXPathFreeContext(xmlXPathContextPtr ctxt)

参数说明

ctxt:需要释放的xpath上下文关系句柄

简单例程

参见xmlXPathNewContext()的例程

函数功能

执行xpath的表达式,返回结果内容节点集合

XPath表达式的表示方法,请参考:

http://www.zvon.org/xxl/XPathTutorial/General/examples.html

函数接口

xmlXPathObjectPtr  xmlXPathEvalExpression (const xmlChar * str,

xmlXPathContextPtr ctxt)

参数说明

str:xpath表达式

ctxt:xpath的上下文关系句柄

返回值:满足表达式的结果集合或者为NULL。该返回句柄由函数内部申请,此函数调用者需要用xmlXPathFreeObject()来释放

简单例程

xmlDocPtr pdoc;

xmlXPathContextPtr xpathctx;

xmlXPathObjectPtr xpathobj;

pdoc = ….

xpathctx = xmlXPathNewContext(pdoc);

if( xpathctx == NULL)

{

printf("Fail to create xpath context.\n");

return ;

}

Xpathobj = xmlXPathEvalExpression(BAD_CAST "//@value", xpathctx);

if( xpathobj == NULL)

{

printf("Fail to evaluate xpath expression.\n");

xmlXPathFreeContext(xpathctx);

return;

}

xmlXPathFreeObject(xpathobj);

xmlXPathFreeContext(xpathctx);

结果集说明:

xpathobj-> nodesetval:存储结果列表,如果为NULL,表示无结果

xpathObj->nodesetval->nodeNr:表示结果的数量

xpathObj->nodesetval->nodeTab:表示结果的数组,可以通过下标访问

例如:

int number;

xmlNodePtr node;

if( xpathobj-> nodesetval == NULL)

number = 0;

else

number = xpathObj->nodesetval->nodeNr;

for(int i=0;i<number;i++)

{

node = xpathObj->nodesetval->nodeTab[i];

do_some_work_with_node();

}

函数功能

释放xpath表达式运算结果集

函数接口

void xmlXPathFreeObject(xmlXPathObjectPtr obj)

参数说明

obj:需要释放的xpath表达式运算结果集合

简单例程

参见xmlXPathEvalExpression()的例程

7.   XML常见使用函数列表

下文是对XML常见使用函数的简要说明,有些函数的具体说明见上面的表格。

<libxml/parser.h>

int xmlKeepBlanksDefault (int val) //设置是否忽略空白节点,比如空格,在分析前必须调用,默认值是0,最好设置成1。

xmlDocPtr xmlParseFile (const char * filename) //分析一个xml文件,并返回一个文档对象指针

<libxml/tree.h>

//xml操作的基础结构提及其指针类型

//xmlDoc  xmlDocPtr 文档对象的结构体及其指针

//xmlNode xmlNodePtr 节点对象的结构体及其指针

//xmlAttr xmlAttrPtr 节点属性的结构体及其指针

//xmlNs xmlNsPtr 节点命名空间的结构及其指针

//根节点相关函数

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 node, int extended) //复制当前节点

//添加子节点相关函数

xmlNodePtr xmlAddChild (xmlNodePtr parent, xmlNodePtr cur) //给指定节点添加子节点

xmlNodePtr xmlAddNextSibling (xmlNodePtr cur, xmlNodePtr elem) //添加后一个兄弟节点

xmlNodePtr xmlAddPrevSibling (xmlNodePtr cur, xmlNodePtr elem) //添加前一个兄弟节点

xmlNodePtr xmlAddSibling (xmlNodePtr cur, xmlNodePtr elem) //添加兄弟节点

//属性相关函数

xmlAttrPtr xmlNewProp (xmlNodePtr node, const xmlChar * name, const xmlChar * value) //创建新节点属性

xmlChar * xmlGetProp (xmlNodePtr node, const xmlChar * name) //读取节点属性

xmlAttrPtr xmlSetProp (xmlNodePtr node, const xmlChar * name, const xmlChar * value) //设置节点属性

//作用同尾部同名的字符串函数。只不过针对相应的xml节点

xmlChar* xmlStrcat (xmlChar *cur, const xmlChar * add)

const xmlChar *xmlStrchr(const xmlChar * str, xmlChar val)

int xmlStrcmp (const xmlChar * str1, const xmlChar * str2)

int xmlStrlen (const xmlChar * str)

xmlChar *xmlStrncat (xmlChar * cur, const xmlChar * add, int len)

int xmlStrncmp (const xmlChar * str1, const xmlChar * str2, int len)

const xmlChar *xmlStrstr (const xmlChar * str, const xmlChar * val

X

XML_CPP_资料_libxml2库函数详解的更多相关文章

  1. Mysql资料 用户权限详解

    目录 一.MySQL权限详解 设置MySQL用户资源限制 用户资源限制执行操作 二.MySQL权限级别介绍 MySQL权限级别 MySQL创建权限 MySQL删除与插入权限 MySQL修改与触发器权限 ...

  2. STM32 串口功能 库函数 详解和DMA 串口高级运用(转载)

    数据传输时要从支持那些相关的标准?传输的速度?什么时候开始?什么时候结束?传输的内容?怎样防止通信出错?数据量大的时候怎么弄?硬件怎么连接出发,当然对于stm32还要熟悉库函数的功能 具起来rs232 ...

  3. 单片机STM32在开发中常用库函数详解

    1.GPIO初始化函数 用法: voidGPIO_Configuration(void) { GPIO_InitTypeDefGPIO_InitStructure;//GPIO状态恢复默认参数 GPI ...

  4. C程序中对时间的处理——time库函数详解

    包含文件:<sys/time.h> <time.h> 一.在C语言中有time_t, tm, timeval等几种类型的时间 1.time_t time_t实际上是长整数类型, ...

  5. Arduino String.h库函数详解

    此库中包含 1 charAT() 2 compareTo() 3 concat() 4 endsWith() 5 equals() 6 equalslgnoreCase() 7 getBytes() ...

  6. STM32F4时钟配置库函数详解

    在STM32中,所有的应用都是基于时钟,所以时钟的配置就尤为重要了,而不能仅仅只知道使用默认时钟. STM32F4的时钟树如上图所示,HSE为外部接入的一个8M的时钟,然后再给PLL提供输入时钟,经过 ...

  7. Lua基础---lua字符串库函数详解,实例及正则表达式

    参考这个网友写的,比较简单容易理解. http://blog.csdn.net/wlgy123/article/details/49206183

  8. libxml2库函数详解

    许多事物符合80/20法则,libxml中也是20%的函数提供了80%的功能.下面的列表列出了libxml的主要函数及其用法说明. 1.   全局函数说明 头文件引用 xml2config --cfl ...

  9. Arduino Wire.h(IIC)库函数详解

    此库中包含 1 Wire.begin() 2 Wire.requestFrom() 3 Wire.beginTransmission() 4 Wire.endTransmission() 5 Wire ...

随机推荐

  1. 【upstream】Nginx配置upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  2. 【环境变量】删掉centos原有的openjdk并安装sun jdk

    一.卸载原有openjdk rpm -qa | grep java 之后,将展示出来的全部卸载掉,我这里是5个 rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111 ...

  3. 读书--编写高质量代码 改善C#程序的157个建议2

    重新从图书馆将这本书借出来,看一遍似乎记不住,这次打算看一点就记录点,记录下自己容易忘记的知识点,便于记住. 建议1:正确使用字符串: 1    string str1= "hellowor ...

  4. sql中 substring和charindex 的用法

    -- 第一个参数是要截取的字符串,第二个参数是从第几个字符开始截取,第三个参数是截取的长度 --例如:select SUBSTRING('12345678',1,4) 返回 1234 -- selec ...

  5. Junit4用法

    序号 方法和描述 1 void assertEquals(boolean expected, boolean actual) 检查两个变量或者等式是否平衡 2 void assertTrue(bool ...

  6. ARM中的汇编指令

    Arm指令,32位的指令集,一共有16条的基本指令,每条指令都可以按条件执行, 指令都是32bit的,高四位是条件码[31:28], Thumb指令,16位的指令集,执行效率比arm指令集要低,但是节 ...

  7. 禁止F12与右键

    实践项目的代码哦,给大家分享下,如何屏蔽右键与F12. 应用网站  www.empiretreasure.vip   与       www.MineBook.vip.可以去逛逛哦. 不多说了,上代码 ...

  8. Java设计模式应用——观察者模式

    告警结果产生后,可能需要发送短信,邮件,故障管理系统.这些转发操作不应当影响告警生成入库,并且类似事件可能根据不同场景,客户习惯不同,此时,使用观察者模式则可以很好的适应上述场景. 观察者模式应当包括 ...

  9. Azkaban-开源任务调度程序(使用篇)

    上篇文章说到了安装,这次说说使用 登录 https://localhost:8443 注意是https,采用的是jetty ssl链接.输入账号密码azkaban/azkanban(如果你之前没有更改 ...

  10. python 单例模式,一个类只能生成唯一的一个实例,重写__new__方法详解

    单例:一个类只能生成唯一的一个实例 每个类只要被实例化了,他的私有属性 '_instance'就会被赋值,这样理解对吗 对 #方法1,实现__new__方法 #并在将一个类的实例绑定到类变量_inst ...