Xml 当Delphi由于枚举名中的连字符而不正确地导入WSDL时,我应该怎么做?

Xml 当Delphi由于枚举名中的连字符而不正确地导入WSDL时,我应该怎么做?,xml,delphi,class,proxy,wsdl,Xml,Delphi,Class,Proxy,Wsdl,我正在使用Delphi,我正在使用另一家公司的wsdl文件来设置我的代理类,以使用他们的web服务中的数据。wsdl文件包含以下内容: <xsd:simpleType name="departStatus"> <xsd:annotation> <xsd:documentation>Enumerates allowable departure statuses (DEPARTED, NOT-DEPARTED)</xsd:documentati

我正在使用Delphi,我正在使用另一家公司的wsdl文件来设置我的代理类,以使用他们的web服务中的数据。wsdl文件包含以下内容:

  <xsd:simpleType name="departStatus">
  <xsd:annotation>
   <xsd:documentation>Enumerates allowable departure statuses (DEPARTED, NOT-DEPARTED)</xsd:documentation>
   </xsd:annotation>
  <xsd:restriction base="xsd:string">
   <xsd:enumeration value="DEPARTED"/>
   <xsd:enumeration value="NOT-DEPARTED"/>
   </xsd:restriction>
   </xsd:simpleType>
  departStatus = (
      DEPARTED, 
      [System.Xml.Serialization.XmlEnumAttribute('NOT-DEPARTED')]
      NOTDEPARTED);

除非我删除以[System.xml…]开头的行,否则它不会编译,并且它不会将“not-Deceed”识别为Deception Status的有效值。如果我在wsdl文件和任何传入的xml文件中将“not-Deceed”更改为“not_Deceed”,它可以正常工作,但设置它的公司坚持“not-Deceed”是有效的,不会更改。为什么不正确设置departStatus枚举?有什么想法吗?提前感谢您的帮助。

Delphi SOAP运行时和导入器更新

< P>如果Delphi(.NET)运行时不支持枚举名称中的连字符,那么我将使用VisualStudio和C.*来创建一个基本的测试应用程序,以查明它是否在那里工作。根据结果,我将考虑编写一个可以从Delphi(.NET)中消费的代理服务。.如果C#web服务支持失败并出现相同的错误,那么作为最后手段,Java代理可能是一种选择


另一个想法是:过滤web请求/响应HTTP数据,并“动态”转换拼写。我有一个可能的解决方法:

由于
departStatus
属于基本类型
xsd:string
,因此您应该能够将WSDL文件中出现的
departStatus
类型更改为
xsd:string


这样,你就可以传递/解释字符串
'depened'
'NON-depened'
,而不是使用枚举。

你使用的是哪个版本的delphi?@RRUZ:这个问题之前被标记为
.net
)@mjn,op上说
我在使用delphi,我在使用wsdl文件…
你能提供到wsdl的链接吗?@RRUZ:somebody使用帐户RRUZ删除了
.net
标记-查看源代码,这显然不是Delphi Win32I使用的是Delphi 2005,下面是一个指向包含wsdl和xml文件的ZIP文件的链接:如果可以获得副本,我会尝试Delphi 2007(.net)。可能Soap支持在那里得到了修复。您能提供详细信息吗“筛选响应HTTP数据并动态转换拼写"?我不熟悉xml处理,我不知道怎么做。是Delphi还是Delphi.Net 2005?你能详细介绍一下我是如何做的吗?我对处理xml文件很不熟悉。我应该对代理类代码做什么更改?我不会更改生成的代码,我宁愿更改wsdl文件。搜索所有出现的
departStatus
然后将它们替换为
xsd:string
,然后从wsdl文件中删除您在问题中给出的代码片段。然后代理代码应该是字符串类型而不是枚举类型。宾果!工作起来很有魅力!这是一个“解决办法”,但它确实奏效。我欠你一个大的人情。我尝试了这个方法,假设我安装正确,结果是疯狂的e没有区别。@Bob,它不会替换ide的wsdl导入器。您必须使用从命令行下载的wsdlimp.exe(暂时不要担心任何命令行参数)。