0

我正在制作一个应用程序,该应用程序通过使用“登录”并返回 xml“字符串”的 web 服务调用来搜索数据库。

此调用的 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”类中的响应数据,它会打印 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 文档?

4

1 回答 1

0

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

原来它是由 WSDL 和 wsdl2objc 设置的,以返回 wearg 变量类型。我改变了它并最终使用 Dictionary 作为返回值,因为这是一个未使用的预定义类型。然后我可以毫不费力地赞美它。

于 2013-11-25T09:44:08.673 回答