我有一个Delphi XE应用程序,它使用Cold Fusion编写的Web服务(我无法控制服务的输出格式)。我在Delphi中使用WSDL Importer来为我的Web服务调用创建我的单元。我遇到的情况是,我在Delphi中遇到了一个说“元素”数据“不包含单个文本节点”的异常。消费Web服务时会导致此错误的原因是什么?
来从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>
什么原因导致了这个异常,并且有没有办法绕过它而无法更改Web服务本身?
请发布delphi xml处理代码 – Sam
这是一些丑陋的XML。没有真正的命名的一切“数据”?有人不知道XML和SOAP是关于什么的!我怀疑是Delphi代码不能处理所有的节点是同一个名字,所以会感到困惑,但是! – mj2008
@ mj2008:我同意XML很丑陋。这是Cold Fusion简化编写Web服务的“特性”之一;开发人员不必考虑XML格式。如果他们用Delphi编写的话,它会更加干净。 –