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

来源:互联网 发布:淘宝的自制护肤品 编辑:程序博客网 时间:2024/06/18 09:59
http://blog.csdn.net/hanchaoman/article/details/6781418 


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

分类: XML 4416人阅读 评论(0) 收藏 举报
xml文档数据库语言工具sql

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之间进行强制类型转换是没有问题的。

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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 话费1000充错了怎么办 东西掉在地铁上怎么办 高铁安检丢东西怎么办 东西掉成都地铁上怎么办 东西掉在成都地铁上怎么办 成都地铁上掉东西了怎么办 地铁站丢了东西怎么办 在地铁站丢了东西怎么办 没有签劳动合同不发工资怎么办 没有劳动合同辞职不给工资怎么办 地铁安检要交押金怎么办 在广州地铁上人走丢了怎么办 海尔全自动洗衣机程系乱了怎么办 河南危险化学品经营许可证怎么办 甲方不给付监理费怎么办 甲方不按合同付工程款怎么办 撞车对方全责不赔钱怎么办 电梯坏了没人修怎么办 电工超作证丢了怎么办 设计师直接找电梯厂家怎么办 研究生补助申请期限过了怎么办 我的电脑图标没了怎么办 苹果锁频密码忘了怎么办 孕妇被降职降薪怎么办 公司降职降薪员工不同意怎么办 企业因为经营不善要降薪该怎么办 调岗不降薪我该怎么办? 怀孕后强制调岗怎么办 有限公司法人变更后债务怎么办 有限公司法人跑路债务怎么办 网上买票身份信息待核验怎么办 微信买票身份核验失败怎么办 买高铁票待核验怎么办 网上购票身份待核验怎么办 b站稿件版权原因怎么办 已离职老板打电话说账有问题怎么办 开到应急刹车道怎么办 自动挡的车刹车失灵怎么办 自动挡的车如果刹车失灵怎么办 手动挡汽车刹车失灵怎么办 车辆没有年检出了交通事故怎么办