我有一個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編寫的話,它會更加乾淨。 –