libxml2.7.8 c++ 解析xml文件 中文转换

本文详细介绍了如何在Windows环境下,使用C++和libxml2库进行XML文件的操作,包括下载安装libxml2和ICONV,以及XML的创建、解析、修改和使用XPATH查询。此外,文章还讨论了如何利用ICONV解决XML中文编码问题,提供了一种在C++中处理XML文件中文内容的方法。
摘要由CSDN通过智能技术生成

C++的XML编程经验――LIBXML2库使用指南

写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML库,而且它同时支持多种编程语言;2)LIBXML2库的Tutorial写得不太好,尤其是编码转换的部分,不适用于中文编码的转换;3)网上的大多数关于Libxml2的介绍仅仅是翻译了自带的资料,没有详细介绍如何在windows平台下进行编程,更很少提到如何解决中文问题。

基于以上几点原因,决定写一个在Windows平台下,使用C/C++语言,应用LibXml2库来进行xml文档操作,同时使用ICONV库进行中文编码转换的文档。其中还涉及了MakefileXPATH等相关内容。本文中所有的源代码在http://www.blogjava.net/Files/wxb_nudt/xml_src.rar

下载与安装LIBXML2ICONV

Libxml2是一个C语言的XML程序库,可以简单方便的提供对XML文档的各种操作,并且支持XPATH查询,以及部分的支持XSLT转换等功能。Libxml2的下载地址是http://xmlsoft.org/,完全版的库是开源的,并且带有例子程序和说明文档。最好将这个库先下载下来,因为这样可以查看其中的文档和例子。

windows版本的的下载地址是http://www.zlatkovic.com/libxml.en.html;这个版本只提供了头文件、库文件和dll,不包含源代码、例子程序和文档。在文本中,只需要下载libxml2库、iconv库和zlib库就行了(注意,libxml2库依赖iconvzlib库,本文中重点关注libxml2iconvzlib不介绍),我使用的版本是libxml2-2.6.30.win32.zipzlib-1.2.3.win32.zipiconv-1.9.2.win32.zip

在编程的时候,我们使用windows版本的libxml2zlibiconv,将其解压缩到指定文件夹,例如D:"libxml2-2.6.30.win32D:"zlib-1.2.3.win32以及D:"iconv-1.9.2.win32。事实上,我们知道在windows下面使用头文件、库文件和dll是不需要安装的,它又没有使用任何需要注册的组件或者数据库,只需要告诉编译器和链接器这些资源的位置就可以了。

注意:要在path变量中加上D:"iconv-1.9.2.win32"bin;D:"zlib-1.2.3.win32"bin;D:"libxml2-2.6.30.win32"bin这三个地址,否则在执行的时候就找不到。或者使用更简单的方法,把其中的三个dll到拷贝到system32目录中。

有两种方法来编译链接基于libxml2的程序,第一种是在VC环境中设置libinclude路径,并在link设置中添加libxml2.libiconv.lib;第二种是用编译器选项告诉编译器cl.exe头文件的位置,并用链接器选项告诉链接器link.exe库文件的位置,同时在windows环境变量path中添加libxml2bin文件夹的位置,以便于程序运行时可以找到dll(也可以将dll拷贝到system32目录下)。显然我选择了第二种,那么编译链接一个名为CreateXmlFile.cpp源文件的命令如下:

cl /c /I D:"iconv-1.9.2.win32"include /I D:"libxml2-2.6.30.win32"include CreateXmlFile.cpp

link /libpath:D:"iconv-1.9.2.win32"lib /libpath:D:"libxml2-2.6.30.win32"lib CreateXmlFile.obj iconv.lib libxml2.lib

显然这样很费时,那么再不用makefile就显得矫情了,于是,一个典型的使用nmake.exeVC自带的makefile工具)的文件如下:MAKEFILE

#

# 本目录下所有源代码的makefile,使用方法是nmake TARGET_NAME=源代码文件名字(不加后缀)

# 例如 nmake TARGET_NAME=CreateXmlFile

# Author: Wang Xuebin

#

# Flags - 编译debug版本

#

#指定要使用的库的路径,需要用户修改的变量一般放在makefile文件的最上面

LIBXML2_HOME = D:"libxml2-2.6.30.win32

ICONV_HOME = D:"iconv-1.9.2.win32

#指定编译器选项,/c表明cl命令只编译不链接;/MTd表明使用多线程debug库;/Zi表明产生完整的调试信息;

#/Od表明关闭编译优化;/D _DEBUG表明定义一个名为_DEBUG的宏

CPP_FLAGS=/c /MTd /Zi /Od /D _DEBUG

#链接选项,/DEBUG表明创建Debug信息

EXE_LINK_FLAGS=/DEBUG

#指定链接的库

LIBS=iconv.lib libxml2.lib

#指定编译路径选项,链接路径选项

INCLUDE_FLAGS= /I $(LIBXML2_HOME)"include /I $(ICONV_HOME)"include

LIB_PATH_FLAGS = /libpath:$(ICONV_HOME)"lib /libpath:$(LIBXML2_HOME)"lib

#################################################

#

# Targets 目标

#

$(TARGET_NAME) : $(TARGET_NAME).exe

clean : $(TARGET_NAME).exe

$(TARGET_NAME).obj : $(TARGET_NAME).cpp

    cl $(CPP_FLAGS) $(INCLUDE_FLAGS) $(TARGET_NAME).cpp

$(TARGET_NAME).exe : $(TARGET_NAME).obj

 link $(EXE_LINK_FLAGS) $(LIB_PATH_FLAGS) $(TARGET_NAME).obj $(LIBS)

clean : $(TARGET_NAME).exe

 del $(TARGET_NAME).exe

 del $(TARGET_NAME).obj

 del $(TARGET_NAME).ilk

 del $(TARGET_NAME).pdb

本文不准备介绍makefile的写法,但后续例子程序的编译链接依葫芦画瓢都没有问题,执行编译链接的命令如下:

nmake TARGE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值