检查Delphi WSDL界面中是否存在值

时间:2018-08-06 20:24:45

标签: delphi wsdl

我有一个通过Delphi中的“导入WSDL”选项生成的类:

historyEntry = class(TRemotable)
private
    Fid: Integer;
    Fid_Specified: boolean;
    Ftemperature1: Double;
    Ftemperature1_Specified: boolean;
    Ftemperature2: Double;
    Ftemperature2_Specified: boolean;
    /// etc...

但是,当没有温度2时,简单服务器不会发送Tempatura2标签。但是historyEntry对象针对该temperature2属性返回0,并且由于温度可以为零,因此我无法将其与零进行比较以检查其是否有效。

反正有没有检查响应中是否确实有temperature2标签?

1 个答案:

答案 0 :(得分:1)

根据上下文,您在此处有一些选择。 假设Ftemperature1 ..等是简单的可为空的类型, 您可以:

  • 使用导入选项获得所需的行为:

DocWiki for import WSDL

  

处理可修剪元素和可选元素

     

选中此选项可使WSDL导入器生成有关可选属性和可设置属性的相关信息。 SOAP运行时使用此信息来允许某些属性为零。

     

将TXSString用于简单的可操作类型

     

WSDL标准允许简单类型在C ++中以Delphi或NULL为零,而Delphi和C ++则不允许。选中此选项,以使WSDL导入程序通过使用包装类的实例来克服此限制。

DocWiki - Soap XSBuiltIns

这样,将简单类型交换为复杂类型(例如TXSString),如果没有标签则为零。 如果您可以修改WSDL本身,则可以

  • 对温度或所需的任何标签使用复杂类型:

这将产生相同的结果

  • 使事情变得丑陋并初始化Ftemperature ...在生成的类中(例如-300摄氏度)具有一些奇异的值