调用使用wdsl2objc从ios返回xml的web服务

时间:2013-04-08 15:01:55

标签: ios xml ios6 wsdl2objc

我正在制作一个应用程序,它通过使用“login”的webservice调用搜索数据库,并返回一个xml“string”。

此调用的wdsl如下:

<s:element name="PerformGlobalSearch">
  <s:complexType>
   <s:sequence>
    <s:element minOccurs="0" maxOccurs="1" name="searchString" type="s:string"/>
    <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string"/>
    <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
    <s:element minOccurs="1" maxOccurs="1" name="errorCode" type="s:int"/>
    <s:element minOccurs="0" maxOccurs="1" name="errorDescription" type="s:string"/>
   </s:sequence>
  </s:complexType>
</s:element>

<s:element name="PerformGlobalSearchResponse">
  <s:complexType>
    <s:sequence>
     <s:element minOccurs="0" maxOccurs="1" name="PerformGlobalSearchResult">
       <s:complexType mixed="true">
         <s:sequence>
           <s:any/>
         </s:sequence>
       </s:complexType>
     </s:element>
     <s:element minOccurs="1" maxOccurs="1" name="errorCode" type="s:int"/>
     <s:element minOccurs="0" maxOccurs="1" name="errorDescription" type="s:string"/>
   </s:sequence>
 </s:complexType>

我使用wsdl2objc生成代码,似乎工作正常。我只需要知道如何回复xml。

如果我NSLog“webserviceSvc.m”类中的respondata,则会打印xml。 但是,它然后返回由wsdl2objc“PerformeGlobalSearchResponse”生成的对象。 我设法在代码中收到这个,但我似乎无法认识到它应该包含的xml。

-(void) processResponse : (WebServiceSoapBindingResponse *)soapResponse {
NSArray *responseBodyParts = soapResponse.bodyParts;

id bodyPart;
@try{
   bodyPart = [responseBodyParts objectAtIndex:0];
}
...

else if([bodyPart isKindOfClass:[xxxWebServiceSvc_PerformeGlobalSearchResponse class]])    {
xxxWebServiceSvc_PerformGlobalSearchResponse* SearchResponse = bodyPart;

NSLog(@"Test: %@", SearchResponse.PerformeGlobalSearchResult);
}

我尝试了很多不同的方法。 我需要访问xml,我需要解析它。解析我认为我在尝试不同的解决方案时已经成功。

但我如何评估xml?如何将PerformGlobalSearchResult转换为xml文档?

1 个答案:

答案 0 :(得分:0)

因此我的问题的解决方案最终是更改生成的SOAP代码,以便返回我需要的内容。

事实证明,它由WSDL和wsdl2objc设置以返回worng变量类型​​。 我改变它并最终使用Dictionary作为返回值,因为这是一个未使用的预定义类型。 然后我就可以毫不犹豫地把它搞定了。