C++ XSD Generated解析器中的gSOAP替代方案

C++ XSD Generated解析器中的gSOAP替代方案,c++,xml,xsd,gsoap,C++,Xml,Xsd,Gsoap,我正在使用gSOAP从我自己准备的XSD模式生成XML解析代码。它与web服务无关。从本地文件或内存缓冲区读取XML数据(通过向soap提供适当的istream) 起初,这似乎很简单。但现在随着我越来越多地使用它,我开始看到一些问题 例如,在全局名称空间中引入名称。可以强制使用名称空间,但是构建变得更加困难(因为需要生成额外的代码来处理错误),只能使用一个名称空间,并且由于使用宏,它还可能导致其他问题 一旦每个二进制构建单元有多个模式(.exe,.dll,…),您就需要这些名称空间了 所以我开始

我正在使用gSOAP从我自己准备的XSD模式生成XML解析代码。它与web服务无关。从本地文件或内存缓冲区读取XML数据(通过向
soap
提供适当的
istream

起初,这似乎很简单。但现在随着我越来越多地使用它,我开始看到一些问题

例如,在全局名称空间中引入名称。可以强制使用名称空间,但是构建变得更加困难(因为需要生成额外的代码来处理错误),只能使用一个名称空间,并且由于使用宏,它还可能导致其他问题

一旦每个二进制构建单元有多个模式(
.exe
.dll
,…),您就需要这些名称空间了

所以我开始考虑一些可能的替代方案。尤其是我不需要那些web服务人员。仅自动生成用于基于XSD解析XML的代码


有没有这样的替代方案(对于本机C++)?它们是什么?

以下是有关XML数据绑定的大量资源:

以下是有关XML数据绑定的大量资源:

> P>由GSOAP的WSDL2H进行的XSD转换不产生C++名称空间,而是将XSD名称空间映射到一个前缀名称约定(NSXiNEX),这是非常容易使用的,并且避免了C(和C++)中的名称冲突。任何绑定工具都必须强制执行这种映射规则。为什么说“一旦每个二进制构建单元有多个模式,就需要这些名称空间”?你可以简单地在所有的XSD上运行WSDL2H。

< P>由GSOAP的WSDL2H进行的XSD转换不产生C++命名空间,而是将XSD命名空间映射到一个前缀名称约定(NSXiNEX),这是非常容易使用的,并且避免了C(和C++)中的名称冲突。任何绑定工具都必须强制执行这种映射规则。为什么说“一旦每个二进制构建单元有多个模式,就需要这些名称空间”?您只需在所有XSD上同时运行wsdl2h即可。

几乎花了一年时间才得到一些答案!;)将所有XSD编译为一个既不实用也不友好。考虑从多个LIBS中把多个松散相关的XSD导入到一个,因为所有这些LIBs最终都会在同一个二进制模块中结束。它看起来好吗?它是一个代码生成器,所以旧的库设计模块化规则不适用于IMHO。您可以为项目选择XSD的任何子集并生成专用库。与C++模板库(内部代码生成)相同的概念:使用很多模板,但实例化您选择使用的模板。只需确保通过typemap.dat绑定来分配XML名称空间前缀。几乎花了一年时间才得到一些答案!;)将所有XSD编译为一个既不实用也不友好。考虑从多个LIBS中把多个松散相关的XSD导入到一个,因为所有这些LIBs最终都会在同一个二进制模块中结束。它看起来好吗?它是一个代码生成器,所以旧的库设计模块化规则不适用于IMHO。您可以为项目选择XSD的任何子集并生成专用库。与C++模板库(内部代码生成)相同的概念:使用很多模板,但实例化您选择使用的模板。只需确保通过typemap.dat绑定分配XML名称空间前缀。