没有合适的资源?快使用搜索试试~ 我知道了~
libxml2在linux下的使用.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 161 浏览量
2021-11-18
00:50:53
上传
评论
收藏 57KB PDF 举报
温馨提示
试读
26页
libxml2在linux下的使用.pdf
资源推荐
资源详情
资源评论
这里主要讲述 libxml2 在 linux 下的使用。
(以下内容除了 linux 下的安装步骤是自己写的,其余均出自
http://www.blogjava.net/wxb_nudt/archive/2007/11/28/161340.html
,由于该篇文章讲解的非常详细,我也没必要重写一遍了。如果该篇文章早出些
时候,早期开发我也不会走很多弯路了。虽然在该篇文章出现之前我已经对
libxml2 较熟悉了并开发完毕, 但为了备忘, 现在将该篇文章作为收藏之用。 在此
再次感谢这篇文章的大侠为大家整理了这篇文章 ^_^)
1. 下载与安装 LIBXML2
Libxml2 是一个 C语言的 XML程序库,可以简单方便的提供对 XML文档的各种操作,
并且支持 XPATH查询,以及部分的支持 XSLT转换等功能。 Libxml2 的下载地址是
http://xmlsoft.org/
,完全版的库是开源的,并且带有例子程序和说明文档。最好将这个库先下载下
来,因为这样可以查看其中的文档和例子。
由 于 我 是 在 linux 下 用 C 语 言 进 行 开 发 的 , 所 以 我 下 载 的 是
libxml2-2.6.20.tar.gz 版本的源码包。
具体安装步骤:
1、解压: $tar zxvf libxml2-2.6.20.tar.gz
2、进入解压后的安装目录: $cd libxml2-2.6.20
3、安装三部曲: 1)$./configure
2)$make
3)$make install
安装完毕。
2. Libxml2 中的数据类型和函数
一个函数库中可能有几百种数据类型以及几千个函数,但是记住大师的话, 90%的
功能都是由 30%的内容提供的。对于 libxml2 ,我认为搞懂以下的数据类型和函数
就足够了。
2.1 内部字符类型 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 之间进行强制类型转换是没有问题的。
2.4 文档类型 xmlDoc、指针 xmlDocPtr
xmlDoc是一个 struct ,保存了一个 xml 的相关信息,例如文件名、文档类型、子
节点等等; xmlDocPtr 等于 xmlDoc*,它搞成这个样子总让人以为是智能指针,其
实不是,要手动删除的。
xmlNewDoc函数创建一个新的文档指针。
xmlParseFile 函数以默认方式读入一个 UTF-8格式的文档,并返回文档指针。
xmlReadFile 函数读入一个带有某种编码的 xml 文档,并返回文档指针;细节见
libxml2 参考手册。
xmlFreeDoc 释放文档指针。 特别注意, 当你调用 xmlFreeDoc 时,该文档所有包含
的 节 点 内 存 都 被 释 放 , 所 以 一 般 来 说 不 需 要 手 动 调 用 xmlFreeNode 或 者
xmlFreeNodeList 来释放动态分配的节点内存,除非你把该节点从文档中移除了。
一般来说,一个文档中所有节点都应该动态分配,然后加入文档,最后调用
xmlFreeDoc 一次释放所有节点申请的动态内存,这也是为什么我们很少看见
xmlNodeFree 的原因。
xmlSaveFile 将文档以默认方式存入一个文件。
xmlSaveFormatFileEnc 可将文档以某种编码 / 格式存入一个文件中。
2.5 节点类型 xmlNode、指针 xmlNodePtr
节点应该是 xml 中最重要的元素了, xmlNode代表了 xml 文档中的一个节点, 实现
为一个 struct ,内容很丰富: tree.h
typedef struct _xmlNode xmlNode;
typedef xmlNode *xmlNodePtr;
struct _xmlNode {
void *_private;/* application data */
xmlElementType type; /* type number, must be second ! */
const xmlChar *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 part */
xmlNs *ns; /* pointer to the associated namespace */
xmlChar *content; /* the content */
struct _xmlAttr *properties;/* properties list */
xmlNs *nsDef; /* namespace definitions on this node */
void *psvi;/* for type/PSVI informations */
unsigned short line; /* line number */
unsigned short extra; /* extra data for XPath/XSLT */
};
可以看到,节点之间是以链表和树两种方式同时组织起来的, next 和 prev 指针可
以组成链表,而 parent 和 children 可以组织为树。同时还有以下重要元素:
剩余25页未读,继续阅读
资源评论
xuedaozhijing
- 粉丝: 0
- 资源: 6万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功