Environment:
Xerces-C++ 2.8.0
http://xerces.apache.org/xerces-c/download.cgi
Micorsoft Visual Studio 2010.
要想利用xerces-C++对xml进行操作,除了利用visual stuido建立工程文件外还需要将操作xml文件时将所依赖的Xerces-C++头文件信息和链接库对VS工程的相关属性进行设置.
为方便VS工程文件和所依赖的Xerces-C++依赖文件、库在开发时方便的移动位置,我们采取相对路径的方式进行设置。具体过程如下:
1.解压xerces-c_2_8_0-x86-windows-vc_8_0.zip.
解压后的Xerces-C++有自已的目录结构:
├─
bin
├─doc
│ └─html
│ ├─apiDocs
│ ├─graphics
│ └─resources
├─
include
│ └─xercesc
│ ├─dom
│ │ └─deprecated
│ ├─framework
│ │ └─psvi
│ ├─internal
│ ├─parsers
│ ├─sax
│ ├─sax2
│ ├─util
│ │ ├─Compilers
│ │ ├─MsgLoaders
│ │ │ ├─ICU
│ │ │ ├─InMemory
│ │ │ ├─MsgCatalog
│ │ │ ├─MsgFile
│ │ │ └─Win32
│ │ ├─NetAccessors
│ │ │ ├─libWWW
│ │ │ ├─MacOSURLAccess
│ │ │ ├─MacOSURLAccessCF
│ │ │ ├─Socket
│ │ │ └─WinSock
│ │ ├─Platforms
│ │ │ ├─AIX
│ │ │ ├─BeOS
│ │ │ ├─Cygwin
│ │ │ ├─FreeBSD
│ │ │ ├─HPUX
│ │ │ ├─Interix
│ │ │ ├─IRIX
│ │ │ ├─Linux
│ │ │ ├─MacOS
│ │ │ ├─NetBSD
│ │ │ ├─OpenServer
│ │ │ ├─OS2
│ │ │ ├─OS390
│ │ │ ├─OS400
│ │ │ ├─PTX
│ │ │ ├─QNX
│ │ │ ├─Solaris
│ │ │ ├─Tandem
│ │ │ ├─Tru64
│ │ │ ├─UnixWare
│ │ │ └─Win32
│ │ ├─regx
│ │ └─Transcoders
│ │ ├─Cygwin
│ │ ├─Iconv
│ │ ├─Iconv390
│ │ ├─Iconv400
│ │ ├─IconvFBSD
│ │ ├─IconvGNU
│ │ ├─ICU
│ │ ├─MacOSUnicodeConverte
│ │ ├─Uniconv390
│ │ └─Win32
│ └─validators
│ ├─common
│ ├─datatype
│ ├─DTD
│ └─schema
│ └─identity
├─
lib
├─samples
│ └─data
├─scripts
└─tests
└─DOM
└─TypeInfo
└─data
2.当前项目与Xerces-C++的目录结构如下:
├─xerces-c_2_8_0-x86-windows-vc_8_0
│ ├─bin
│ ├─doc
│ │ └─html
│ │ ├─apiDocs
│ │ ├─graphics
│ │ └─resources
│ ├─
include
│ │ └─xercesc
│ │ ├─dom
│ │ │ └─deprecated
│ │ ├─framework
│ │ │ └─psvi
│ │ ├─internal
│ │ ├─parsers
│ │ ├─sax
│ │ ├─sax2
│ │ ├─util
│ │ │ ├─Compilers
│ │ │ ├─MsgLoaders
│ │ │ │ ├─ICU
│ │ │ │ ├─InMemory
│ │ │ │ ├─MsgCatalog
│ │ │ │ ├─MsgFile
│ │ │ │ └─Win32
│ │ │ ├─NetAccessors
│ │ │ │ ├─libWWW
│ │ │ │ ├─MacOSURLAccess
│ │ │ │ ├─MacOSURLAccessCF
│ │ │ │ ├─Socket
│ │ │ │ └─WinSock
│ │ │ ├─Platforms
│ │ │ │ ├─AIX
│ │ │ │ ├─BeOS
│ │ │ │ ├─Cygwin
│ │ │ │ ├─FreeBSD
│ │ │ │ ├─HPUX
│ │ │ │ ├─Interix
│ │ │ │ ├─IRIX
│ │ │ │ ├─Linux
│ │ │ │ ├─MacOS
│ │ │ │ ├─NetBSD
│ │ │ │ ├─OpenServer
│ │ │ │ ├─OS2
│ │ │ │ ├─OS390
│ │ │ │ ├─OS400
│ │ │ │ ├─PTX
│ │ │ │ ├─QNX
│ │ │ │ ├─Solaris
│ │ │ │ ├─Tandem
│ │ │ │ ├─Tru64
│ │ │ │ ├─UnixWare
│ │ │ │ └─Win32
│ │ │ ├─regx
│ │ │ └─Transcoders
│ │ │ ├─Cygwin
│ │ │ ├─Iconv
│ │ │ ├─Iconv390
│ │ │ ├─Iconv400
│ │ │ ├─IconvFBSD
│ │ │ ├─IconvGNU
│ │ │ ├─ICU
│ │ │ ├─MacOSUnicodeConverter
│ │ │ ├─Uniconv390
│ │ │ └─Win32
│ │ └─validators
│ │ ├─common
│ │ ├─datatype
│ │ ├─DTD
│ │ └─schema
│ │ └─identity
│ ├─lib
│ ├─samples
│ │ └─data
│ ├─scripts
│ └─tests
│ └─DOM
│ └─TypeInfo
│ └─data
└─XmlProcessTst
├─Debug
├─ipch
│ └─xmlprocesstst-4a5cd93f
└─XmlProcessTst
└─Debug
├
XmlProcessTst.vcxproj
─
3.将Xerces-C++的头文件引入到工程的包含文件中去.
1)[Project]->Properties->C/C++/General->Additional Include Directories中添加Xercers-C++包含文件的相对路径:
..\..\xerces-c_2_8_0-x86-windows-vc_8_0\include
2)[Project]->Properties->C/C++/Linker->Additional Dependencies中添加Xercers-C++包含文件的lib:
..\..\xerces-c_2_8_0-x86-windows-vc_8_0\lib\xerces-c_2.lib
3)将..\..\xerces-c_2_8_0-x86-windows-vc_8_0\bin\xerces_c_2_8.dll拷贝到与新工程生成的可执行文件相同的目录中;
在开发阶段这个目录是..\Debug文件夹,如果不将dll文件拷贝过去,程序虽能编译通过但在运行时会提示找不到dll文件错误.
4.现在就可以编写代码进行测试了.
//main.cpp
#include <stdio.h>
#include <xercesc/util/PlatformUtils.hpp>
XERCES_CPP_NAMESPACE_USE
int main(int argc, char* argv[])
{
XMLPlatformUtils::Initialize();
printf("Hello");
XMLPlatformUtils::Terminate();
return 0;
}
//end
--------------------------------------------------------------------------------------------------
1>Build started 2013/10/14 17:53:46.
1>InitializeBuildStatus:
1> Creating "Debug\XmlProcessTst.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1> main.cpp
1>Manifest:
1> Deleting file "Debug\XmlProcessTst.exe.embed.manifest".
1>LinkEmbedManifest:
1> XmlProcessTst.vcxproj -> E:\Rocket_study\Xerces_C_V2_7_1\XmlProcessTst\Debug\XmlProcessTst.exe
1>FinalizeBuildStatus:
1> Deleting file "Debug\XmlProcessTst.unsuccessfulbuild".
1> Touching "Debug\XmlProcessTst.lastbuildstate".
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:02.57
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========