2010-04-15 4 views
0

Je fais un webservice et cela fonctionne, le problème est avec la réponse webservice. J'ai ce xml (et je veux analyser avec touchxml), le problème est avec le touchxml qu'il trouve deux xml, l'un dans l'autre et il fait planter. Voici ma question, comment je peux analyser ce xml? comment je peux supprimer tous les trucs comme savon env, xmlns ....Problème lors de l'analyse d'une réponse de savon (iphone/touchxml)

<?xml version="1.0" encoding="ISO-8859-1"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body> 
<ns1:getCategoriesResponse xmlns:ns1="http://192.168.1.30/wyws/server.php"><return xsi:type="xsd:string"> 

    <?xml version="1.0" encoding="UTF-8"?> 
    <categories> 
     <category id="1" desc="Encontrar Códigos " icon="wy">Código </category> 
     <category id="3" desc="" icon="farm">Far</category> 
     <category id="5" desc="" icon="gas">Gas</category> 
     <category id="6" desc="" icon="hos">Hos</category> 
     <category id="7" desc="" icon="pol">Pol</category> 
    </categories> 

</return></ns1:getCategoriesResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> 

Voici comment je fais l'appel:

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]]; 
[theRequest addValue:@"8bit" forHTTPHeaderField:@"Content-Transfer-Encoding"]; 
[theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
[theRequest addValue: @"getCategories" forHTTPHeaderField:@"SOAPAction"]; 

[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

webData = [[NSMutableData data] retain]; 

Et puis

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 

    NSLog(@"DONE. Received Bytes: %d", [webData length]); 

    NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSISOLatin1StringEncoding]; 


NSLog(theXml); 
.... 
} 

Répondre

1

j'ai écrit ce n'est pas très élégant, mais ça marche.

NSRange in = [tmpTheXml rangeOfString:@"<return xsi:type=\"xsd:string\">"]; 
NSRange fi = [tmpTheXml rangeOfString:@"</return>"]; 
int inic = in.location + in.length; 
NSRange tmprange = {inic,fi.location - inic} ; 
tmpTheXml = [tmpTheXml substringWithRange:tmprange]; 
Questions connexes