Вызов веб-сервиса, который возвращает xml из ios с помощью wdsl2objc

Я делаю приложение, которое выполняет поиск в базе данных с помощью вызова веб-службы, которое использует "login" и возвращает xml "строку".

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 Responddata в классе "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?

1 ответ

Решение

Так что решением моей проблемы стало изменение сгенерированного кода SOAP, чтобы он возвращал то, что мне было нужно.

Оказалось, что он устанавливается WSDL и wsdl2objc для возврата типа переменной worng. Я изменил его и использовал словарь в качестве возвращаемого значения, потому что это был предопределенный тип, который не использовался. Затем я смог написать это без каких-либо затруднений.

Другие вопросы по тегам