libxml2 的使用方法

本文详细介绍了libxml2库的安装、使用、数据结构和基本操作方法,包括XML解析、DOM/SAX解析、XPath解析、编码转换、DTD验证等功能。同时提供了Linux和Windows系统的安装步骤,并说明了如何在C/C++程序中使用libxml2库。
libxml2 库的简介和安装配置

libxml2-xml解析工具(依赖libiconv、zlib库)

1.   安装、使用比较简单,容易入门;
2.   支持的编码格式较多,能很好的解决中文问题(使用一个很简单的编码转换函数);
3.   支持Xpath解析(这点对于任意定位xml文档中的节点还是很有用的哦);
4.   支持Well-formed 和valid验证,具体而言支持DTD验证,Schema验证功能正在完善中(目前多数解析器都还不完全支持shema验证功能);
5.   支持目前通用的Dom、Sax方式解析等等。

linux安装:
安装
1)从xmlsoft站点或ftp(ftp.xmlsoft.org)站点下载libxml压缩包(libxml2-xxxx.tar.gz)
2)对压缩包进行解压缩
  tar xvzf libxml2-xxxx.tar.gz
3)进入解压缩后的文件夹中运行
  #>./configure --prefix /home/user/myxml/xmlinst(此处为待安装的路径)
  #>make
  #>make install
  #>export PATH=/home/user/myxml/xmlinst/bin:$PATH //添加路径


window的安装:
  libxml2需要zlib, libiconv的支持才能运行
  zlib的安装:下载后查看makeFile.msc文件
    在vs.net的命令窗口运行cmd,
    进入win32\中执行:nmake -f win32/Makefile.msc
  libiconv库的安装和配置
  在vs.net的命令窗口中运行cmd,进入根目录中执行:
  nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MD


1.vs-cmd进入libxml2-2.7.6\win32目录
2.然后运行cscript:
  cscript configure.js iconv=no zlib=no static=yes cruntime=/MD prefix=.\Release
  如何使用静态库则用cruntime=/MT
3.修改..\testapi.c(295行)将 '?修改为'?'
4.nmake clean all就会生成对应的库(bin.msvc目录里)


 
libxml2的使用介绍


xml数据结构:
xmlChar:对char的基本代替,是一个UTF-8编码字符串中的一个字节
xmlDoc 和 xmlDocPtr:  树的结构
xmlNode 和 xmlNodePtr:单个节点的结构


生成xmldoc、获得根节点,获得子节点


//4. 解析xml字符串
xmlDocPtr doc = xmlParseMemory(pXml, length);


//根据xmldoc获得xml的根节点
xmlNodePtr cur = xmlDocGetRootElement(doc);


//获得子节点:->children获得不是第一个子节点,必须用next才能获得第一个子节点
cur = cur->children;
cur = cur->next;


// 获得节点信息中的内容: 注意释放资源
xmlChar* key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
xmlFree(key);


//获得节点信息属性的值:属性name,注意释放资源
xmlChar* fversion = xmlGetProp(cur, "version");
xmlFree(fversion);

//根节点相关函数
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) //设置节点属性


=xmlNodeListGetstring(doc, cur->xmlChildrenNode, 1);
=xmlNodeContent(cur);

libxml2编译
一般编译命令“gcc -o xml xml.c”有两个defect:


Defect 1:
编译指令里没有指明libxml2的路径。
Linux通常的发行版的libxml2的路径在/usr/include/libxml2下面,所以常用的参数是 -I/usr/include/libxml2


Defect 2:
libxml2是需要链接库文件的。没有链接库文件的参数,自然报告一堆链接错误。
加上这个应该就行: -lxml2


也就是说,试一下这个:
gcc -o xml xml.c -I/usr/include/libxml2 -lxml2


PS:
“#include <libxml2/libxml/parser.h>”这样写是不行的。虽然这样能找到parser.h这个文件,但这个文件里面列的全是相对路径,于是编译器去找:<你pwd的路径>/libxml//tree.h什么之类的去了,自然找不到。除非你的当前目录是/usr /include/libxml2这个目录。


PS 2:
[url]http://bbs.chinaunix.net/viewthread.php?tid=1350995&pid=9917789&page=1&extra=page%3D1#pid9917789[/url]
### 不同操作系统上的 libxml2 安装方法 #### Linux 系统下的源码安装 在 Linux 上通过源码方式安装 `libxml2` 是一种常见的方式。此过程涉及下载、解压、配置以及编译安装等操作。 1. 配置阶段 使用 `./configure` 命令来检测系统的环境并生成 `Makefile` 文件,这是后续编译的基础[^1]。可以通过参数 `--prefix` 来指定安装路径,例如 `/usr/local/libxml2/`。 ```bash ./configure --prefix=/usr/local/libxml2/ ``` 2. 编译与安装 执行以下命令完成编译和安装: ```bash make && make install ``` #### RPM 包管理器安装 对于某些发行版(如 CentOS 或 RHEL),可以利用 RPM 包管理工具简化安装流程。这种方式无需手动编译,只需执行简单的包管理命令即可完成安装[^2]。 ```bash yum install libxml2-devel ``` 或者使用 `dnf` 工具(适用于较新的 Fedora 版本): ```bash dnf install libxml2-devel ``` #### macOS 系统下的 Homebrew 安装 在 macOS 平台上推荐使用 Homebrew 软件包管理系统来进行安装。Homebrew 提供了一种简单的方法来获取最新版本的 `libxml2` 库。 ```bash brew install libxml2 ``` 如果需要链接到特定项目中,则可能还需要设置额外的环境变量或修改项目的构建脚本以指向新安装的位置。 #### Windows 下 MinGW 或 Cygwin 的支持 虽然原生 Windows 对于开发人员来说并不总是首选平台,但是仍然有几种途径可以在该环境下运行 `libxml2`。最常用的是借助交叉编译工具链比如 **MinGW** 和 **Cygwin** 实现跨平台兼容性。 - 利用预编译二进制文件直接部署; - 或者按照官方文档指示,在本地环境中模拟 Unix Shell 进行完整的构建周期。 --- ### 总结 无论是在类 UNIX 操作系统还是其他平台上,都有多种可行方案可供选择以便成功集成 `libxml2` 至应用程序之中。每种方法各有优劣,具体取决于目标用户的偏好和技术栈需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值