使用Delphi 2007我试图导入wsdl供客户端使用。
我已经在https://services.rdc.nl/voertuigscan/2.0/wsdl
导入了WSDL,它导入了一个xsd来定义它的类型。在导入的xsd中,还有几个额外的导入和包含的xsd,其中定义了以下类型:
<xs:complexType name="BedragExtended">
<xs:simpleContent>
<xs:extension base="ct:Bedrag">
<xs:attribute name="Bron" type="Bron"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
类型ct:Bedrag在包含的XSD中定义为:
<xs:simpleType name="Bedrag">
<xs:restriction base="xs:decimal">
<xs:totalDigits value="9"/>
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>
但是,BedragExtended类型导入为:
// ************************************************************************ //
// XML : BedragExtended, global, <complexType>
// Namespace : http://nsp.rdc.nl/RDC/voertuigscan
// ************************************************************************ //
BedragExtended = class(TRemotable)
private
FBron: Bron;
FBron_Specified: boolean;
procedure SetBron(Index: Integer; const ABron: Bron);
function Bron_Specified(Index: Integer): boolean;
published
property Bron: Bron Index (IS_ATTR or IS_OPTN) read FBron write SetBron stored Bron_Specified;
end;
正如您所看到的,没有提到Bedrag类型的基础值,但是wsdl导入生成的.pas文件顶部的标题显示已经解析了正确的xsd。如何让Delphi正确生成BedragExtended类型?
答案 0 :(得分:0)
在所有语言中看到这种行为是很典型的(我至少知道)。简单类型通常不映射到类。唯一值得注意的例外是使用枚举方面的简单类型,在这种情况下,您可能会获得类型安全枚举(Java和.NET)。
由于BedragExtended
是一个带有属性的字符串,因此有点期待。不幸的是,在XSD 1.0中你不能同时扩展(设置属性)和限制(限制词法空间),所以很常见的是这个实现,这是一个复杂的类型(获取属性)但是内容简单(基本上是某种文字)。