欢迎来到天天文库
浏览记录
ID:47431495
大小:96.00 KB
页数:16页
时间:2020-01-11
《libxml函数编程封装》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1 编写说明本文档主要介绍XML的基本知识及利用如何利用libxml来操作xml文件。2 XML基础XML(ExtensibleMarkupLanguage)即可扩展标记语言,它与HTML一样,都是SGML(StandardGeneralizedMarkupLanguage,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立。XML中共有12种节点类型,其中最常见的节点类型有5种:元素:元素是XML的基本
2、组成单元。,描述XML的基本信息。属性:属性节点包含关于元素节点的信息,通常包含在元素里面,描述元素的属性。文本:包含许多文本信息或者只是空白。文档:文档节点是整个文档中所有其它节点的父节点。注释:注释是对相关的信息进行描述、注释。xml的解析一般都是用j2se提供的API来解析,在linux下有两种方法来解析,一个是DOM(documentobjectModel),文档对象模型法,还有就是简单API(simpleAPIforXML,SAX)。DOM中的核心概念就是节点。DOM在分析XML文档时,将将组成XML文档的各个部分(元素、属性、文本、注释、处理指令等)映射为一个对象(节点)。在内
3、存中,这些节点形成一课文档树。整棵树是一个节点,树中的每一个节点也是一棵树(子树),可以说,DOM就是对这棵树的一个对象描述,我们通过访问树中的节点来存取XML文档的内容。SAX是一种基于事件驱动的API。利用SAX解析XML文档,牵涉到两个部分:解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发生事件,如元素开始和元素结束事件;而事件处理器则负责对事件做出响应,对传递的XML数据进行处理DOM虽然是W3C的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一个驻留内存的树结构(节点树),然后您的代码才可以使用DOM的
4、标准接口来操作这个树结构。但大部分情况下我们只对文档的部分内容感兴趣,根本就不用先解析整个文档,并且从节点树的根节点来索引一些我们需要的数据也是非常耗时的。相比于文档对象模型DOM,SAX是读取和操作XML数据的更快速、更轻量的方法。SAX允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及DOM所必需的开销和概念跳跃。SAXAPI是一个基于事件的API,适用于处理数据流,即随着数据的流动而依次处理数据。SAXAPI在其解析您的文档时发生一定事件的时候会通知您。在您对其响应时,您不作保存的数据将会被抛弃。SAX不必事先将整个XML文档加载到内存中,因此它占据内存要比
5、DOM小,对于大型的XML文档来说,通常会使用SAX而不是DOM进行解析。3 LibXml介绍需求安装包:libxml2和libxm2-devel,其中libxml主要包括.so文件,libxml2-devel 包括开发文档和所有的.h文件。Linux下可用rpm–ql命令查看,rpm–qd可查看文档信息。3.1 数据类型--xmlChar在libXml中用xmlCha 替代char,XML使用UTF-8编码的一字节字符串。如果你的数据使用其它编码,它必须被转换到UTF-8才能使用libxml的函数。转码函数需用到libiconv库中的ConvertEncoding()函数。
6、如同标准c中的char类型一样,xmlChar也有动态内存分配、字符串操作等相关函数。例如xmlMalloc是动态分配内存的函数;xmlFree是配套的释放内存函数等等。基本上动态内存分配函数xmlmemory.h中定义。而为了方便对xmlChar类型字符串的操作,libxml提供了自己的函数,它们的定义于标准c函数库中的字符串函数很像,xmlChar字符串相关函数都在xmlstring.h中定义:xmlChar*xmlStrcat(xmlChar*cur,constxmlChar*add)constxmlChar*xmlStrchr(constxmlChar*str,xmlCharval
7、)intxmlStrcmp(constxmlChar*str1,constxmlChar*str2)intxmlStrlen(constxmlChar*str)xmlChar*xmlStrncat(xmlChar*cur,constxmlChar*add,intlen)intxmlStrncmp(constxmlChar*str1,constxmlChar*str2,intlen)constxmlChar*xmlStrs
此文档下载收益归作者所有