我正在制作一个应用程序,它通过使用“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文档?
答案 0 :(得分:0)
因此我的问题的解决方案最终是更改生成的SOAP代码,以便返回我需要的内容。
事实证明,它由WSDL和wsdl2objc设置以返回worng变量类型。 我改变它并最终使用Dictionary作为返回值,因为这是一个未使用的预定义类型。 然后我就可以毫不犹豫地把它搞定了。