我已经下载了该Web服务的架构,然后使用“ RestDebugger”创建必要的pascal文件。来自Web服务的响应包含模式和“ diffgram”部分。 diffgram和模式包含在一个名为的节中,但是由“ RestDebugger”创建的原始代码不包含“ diffgram”节。我必须手动将其添加到pascal文件中。
好的,到目前为止,还不错,但是当我尝试从这部分检索数据时,我失败了。我已经使用XML Mapper创建了一个转换文件,以与组件TXMLTransform一起使用。我已经将此组件连接到TDataset和TDBGrid,但是我仅获得列标题,但没有数据。
该代码如下:
XMLTransform1.SourceXMLFile := 'xml1.xml';
ClientDataSet1.XMLData := XMLTransform1.Data;
ClientDataSet1.Active := true;
在组件属性中设置转换文件:TransformationFile:“ Test.xtr”
它并不关心数据文件包含什么,只要它是有效的xml。结果是一个网格,显示具有正确标题但无数据的所有列。
我已经阅读了很多有关此问题的文档,但是找不到任何可以帮助我解决问题的文档。我不确定我应该在此处包括哪些文档,文本很多,但是我很确定它一定是我所缺少的非常基本的东西,所以我认为简单但完整的说明/示例就足够了。 否则,我认为我必须创建自己的解析函数,该函数至少可以在此特定项目上运行。但这感觉很沉重。
简而言之:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetDataBySecureResponse xmlns="https://xxxxx.getdata/">
<GetDataBySecureResult>
<SearchNumber>674564784</SearchNumber>
<TransactionId>1199</TransactionId>
<Block_Name>BSDA_C_BASIC</Block_Name>
<Parameters>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<GETDATA_RESPONSE diffgr:id="GETDATA_RESPONSE1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<ORGNR>674564784</ORGNR>
<NAME>NICE NAME</NAME>
</NewDataSet>
</diffgr:diffgram>
</Parameters>
</GetDataBySecureResult>
</GetDataBySecureResponse>
</soap:Body>
</soap:Envelope>
在这个简单的示例中,我将在网格中填充两列“ ORGNR”和“ NAME”,但没有行。