個人總結C語言下xml使用全集_libxml
LIBXML2庫使用指南
C++的XML程式設計經驗――LIBXML2庫使用指南
1)C++标準庫中沒有操作XML的方法,用C++操作XML檔案必須熟悉一種函數庫,LIBXML2是其中一種很優秀的XML庫,而且它同時支援多種程式設計語言;2)LIBXML2庫的Tutorial寫得不太好,尤其是編碼轉換的部分,不适用于中文編碼的轉換;3)網上的大多數關于Libxml2的介紹僅僅是翻譯了自帶的資料,沒有詳細介紹如何在windows平台下進行程式設計,更很少提到如何解決中文問題。
基于以上幾點原因,決定寫一個在Windows平台下,使用C/C++語言,應用LibXml2庫來進行xml文檔操作,同時使用ICONV庫進行中文編碼轉換的文檔。其中還涉及了Makefile、XPATH等相關内容。本文中所有的源代碼在/Files/wxb_nudt/xml_src.rar。
1.???????下載下傳與安裝LIBXML2和ICONV
Libxml2是一個C語言的XML程式庫,可以簡單友善的提供對XML文檔的各種操作,并且支援XPATH查詢,以及部分的支援XSLT轉換等功能。Libxml2的下載下傳位址是/,完全版的庫是開源的,并且帶有例子程式和說明文檔。最好将這個庫先下載下傳下來,因為這樣可以檢視其中的文檔和例子。
windows版本的的下載下傳位址是/libxml.en.html;這個版本隻提供了頭檔案、庫檔案和dll,不包含源代碼、例子程式和文檔。在文本中,隻需要下載下傳libxml2庫、iconv庫和zlib庫就行了(注意,libxml2庫依賴iconv和zlib庫,本文中重點關注libxml2和iconv,zlib不介紹),我使用的版本是libxml2-2.6.30.win32.zip、zlib-1.2.3.win32.zip和iconv-1.9.2.win32.zip。
在程式設計的時候,我們使用windows版本的libxml2、zlib和iconv,将其解壓縮到指定檔案夾,例如D:"libxml2-2.6.30.win32,D:"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環境中設定lib和include路徑,并在link設定中添加libxml2.lib和iconv.lib;第二種是用編譯器選項告訴編譯器cl.exe頭檔案的位置,并用連結器選項告訴連結器link.exe庫檔案的位置,同時在windows環境變量path中添加libxml2中bin檔案夾的位置,以便于程式運作時可以找到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.exe(VC自帶的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表明關閉