【发布时间】:2011-08-24 21:28:11
【问题描述】:
我有一个 Delphi XE 应用程序,它使用以 Cold Fusion 编写的 Web 服务(我无法控制服务的输出格式)。我使用 Delphi 中的 WSDL Importer 来创建我的单元以调用 Web 服务。我遇到了在 Delphi 中出现异常的情况,即“元素“数据”不包含单个文本节点”。
当我收到异常时,从 Web 服务返回的 XML 的相关部分是这样的:
<data soapenc:arrayType="xsd:anyType[][1]" xsi:type="soapenc:Array">
<data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
<data xsi:type="soapenc:string">6490</data>
<data xsi:type="soapenc:string">Other Expense</data>
</data>
</data>
如果来自 Web 服务的 XML 包含多个 <data> 子级,则不会发生异常。
<data soapenc:arrayType="xsd:anyType[][3]" xsi:type="soapenc:Array">
<data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
<data xsi:type="soapenc:string">2600</data>
<data xsi:type="soapenc:string">Deferred Revenue</data>
</data>
<data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
<data xsi:type="soapenc:string">4120</data>
<data xsi:type="soapenc:string">Non-Credit Income</data>
</data>
<data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array">
<data xsi:type="soapenc:string">6490</data>
<data xsi:type="soapenc:string">Other Expense</data>
</data>
</data>
是什么导致了这个异常,有没有办法在不改变网络服务本身的情况下解决它?
【问题讨论】:
-
请贴delphi xml处理代码
-
那是一些丑陋的 XML。没有真正命名的所有“数据”?有人不知道 XML 和 SOAP 是关于什么的!我的怀疑是 Delphi 代码无法处理所有同名的节点,所以会感到困惑,但见鬼!
-
@mj2008:我同意 XML 的丑陋。简化 Web 服务的编写是 Cold Fusion 的“特性”之一;开发人员不必考虑 XML 格式。如果他们是用 Delphi 编写的,它会干净得多。
标签: web-services delphi delphi-xe