XML文件的解析--libxml库函数解释

前端之家收集整理的这篇文章主要介绍了XML文件的解析--libxml库函数解释前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
http://blog.csdn.net/hanchaoman/article/details/6781418


XML文件的解析--libxml库函数解释

分类XML 4416人阅读 评论(0) 收藏 举报

http://zacaosansan.spaces.live.com/Blog/cns!20F577789A0BB695!206.entry

解析xml文档
解析一个xml文档,从中取出想要的信息,例如节点中包含的文字,或者某个节点的属性,其流程如下:

用xmlReadFile函数读出一个文档指针doc;

用xmlDocGetRootElement函数得到根节点curNode;

curNode->xmlChildrenNode就是根节点的子节点集合;

轮询子节点集合,找到所需的节点,用xmlNodeGetContent取出其内容

用xmlHasProp查找含有某个属性的节点;

取出该节点的属性集合,用xmlGetProp取出其属性值;

用xmlFreeDoc函数关闭文档指针,并清除本文档中所有节点动态申请的内存。


3.4 使用XPATH查找xml文档
简而言之,XPATH之于xml,好比sql之于关系数据库。要在一个复杂的xml文档中查找所需的信息,XPATH简直是必不可少的工具。
XPATH语法简单易学,并且有一个很好的官方教程,见http://www.zvon.org/xxl/XPathTutorial/Output_chi/introduction.html
这个站点的XML各种教程齐全,并且有包括中文在内的各国语言版本,真是让我喜欢到非常!

使用XPATH之前,必须首先熟悉几个数据类型和函数,它们是使用XPATH的前提。在libxml2中使用Xpath是非常简单的,其流程如下:

调用 xmlParseFile 来从文件中获得新的 XML 文档

定义一个XPATH上下文指针xmlXPathContextPtr context,并且使用xmlXPathNewContext函数来初始化这个指针;

定义一个XPATH对象指针xmlXPathObjectPtr result,并且使用xmlXPathEvalExpression函数来计算Xpath表达式,得到查询结果,将结果存入对象指针中;

使用result->nodesetval得到节点集合指针,其中包含了所有符合Xpath查询结果的节点;

使用xmlXPathFreeContext释放上下文指针;

使用xmlXPathFreeObject释放Xpath对象指针;


3.5
内部字符类型xmlChar

xmlChar是Libxml2中的字符类型,库中所有字符、字符串都是基于这个数据类型。事实上它的定义是:xmlstring.h

typedef unsigned char xmlChar;

使用unsigned char作为内部字符格式是考虑到它能很好适应UTF-8编码,而UTF-8编码正是libxml2的内部编码,其它格式的编码要转换为这个编码才能在libxml2中使用。

还经常可以看到使用xmlChar*作为字符串类型,很多函数会返回一个动态分配内存的xmlChar*变量,使用这样的函数时记得要手动删除内存。

2.2 xmlChar相关函数
如同标准c中的char类型一样,xmlChar也有动态内存分配、字符串操作等相关函数。例如xmlMalloc是动态分配内存的函数;xmlFree是配套的释放内存函数;xmlStrcmp是字符串比较函数等等。

基本上xmlChar字符串相关函数都在xmlstring.h中定义;而动态内存分配函数在xmlmemory.h中定义。

2.3 xmlChar*与其它类型之间的转换
另外要注意,因为总是要在xmlChar*和char*之间进行类型转换,所以定义了一个宏BAD_CAST,其定义如下:xmlstring.h

#define BAD_CAST (xmlChar *)

原则上来说,unsigned char和char之间进行强制类型转换是没有问题的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

猜你在找的XML相关文章