2010-12-02 45 views
0

Bonjour, je suis nouveau dans le développement de l'iPhone. J'ai créé une application qui consomme des données du service Web. Et cela fonctionne très bien, mais j'ai un problème avec l'analyse.XML analyse - iPhone

Les données xml que je reçois du service Web est:

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> 
<h4>A PHP Error was encountered</h4> 

<p>Severity: Warning</p> 
<p>Message: session_start() [<a href='function.session-start'>function.session-tart</a>]: 
Cannot send session cookie - headers already sent by (output started at D:\xampp\htdocs\system  
\application\controllers\isignin.php:4)</p> 
<p>Filename: libraries/session.php</p> 
<p>Line Number: 146</p> 

</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> 

<h4>A PHP Error was encountered</h4> 

<p>Severity: Warning</p> 
<p>Message: session_start() [<a href='function.session-start'>function.session-start</a>]:  Cannot send session cache limiter - headers already sent (output started at D:\xampp\htdocs\6d\system \application\controllers\isignin.php:4)</p> 
<p>Filename: libraries/session.php</p> 
<p>Line Number: 146</p> 

</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> 

<h4>A PHP Error was encountered</h4> 

<p>Severity: Warning</p> 
<p>Message: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\6d\system\application\controllers\isignin.php:4)</p> 
<p>Filename: codeigniter/Common.php</p> 
<p>Line Number: 360</p> 

</div><?xml version="1.0" encoding="utf-8"?> 
<xml><item>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;newblock&gt;&lt;name&gt;abcde 
&lt;/name&gt;&lt;password&gt;12345678&lt;/password&gt;&lt;/newblock&gt;</item></xml> 

Voici ce que j'appelle de méthode connectionDidFinishLoading:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
    { 
     NSLog(@"DONE. Received Bytes: %d", [webData length]); 


    if (xmlParser) 
    { 
    [xmlParser release]; 
    }  
    xmlParser = [[NSXMLParser alloc] initWithData: webData]; 
    [xmlParser setDelegate: self]; 
    [xmlParser setShouldResolveExternalEntities:YES]; 
    [xmlParser parse]; 



    [connection release]; 
    [webData release]; 
} 

Voici les méthodes d'analyse utilisées:

-(void) parser:(NSXMLParser *) parser 
didStartElement:(NSString *) elementName 
    namespaceURI:(NSString *) namespaceURI 
qualifiedName:(NSString *) qName 
attributes:(NSDictionary *) attributeDict { 

if([elementName isEqualToString:@"GetWeatherResult"]) 
{ 
    if (!soapResults) 
{ 
soapResults = [[NSMutableString alloc] init]; 
} 
elementFound = YES; 
} 
    } 

-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string 
{ 
if (elementFound) 
{ 
    [soapResults appendString: string]; 
} 
} 

-(void)parser:(NSXMLParser *)parser 
didEndElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName 
    { 
    if ([elementName isEqualToString:@"GetWeatherResult"]) 
    { 
    //---displays the country--- 
    NSLog(soapResults);   
    UIAlertView *alert = [[UIAlertView alloc] 
    initWithTitle:@"Current Temperature!"       
    message:soapResults 
    delegate:self 
    cancelButtonTitle:@"OK" 
    otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    [soapResults setString:@""]; 
    elementFound = FALSE; 
} 
} 

Ma requête est: Je veux extraire le tag "name" avec la valeur "ABCDE" à partir des données XML reçues.
Mais quand je recherche "nom" avec une valeur"ABCDE" dans les données XML ci-dessus reçues, analyseur ne peut pas trouver à cause de & qt, & lt etc.

1) Comment réparer mon NSMutableData pour avoir des valeurs normales (<,> etc.)? Toutes les fonctions intégrées de NSMutableData pour remplacer & lt, & gt avec <,>? Ou
2) Y at-il quelque chose manque (ou faire le mal) tout en générant les données XML du côté serveur ou que je manque quelque chose lors de l'analyse du côté client (sur iPhone) Ou
3) Toute autre solution résoudre le problème ci-dessus.

Merci d'avance.

Répondre

-1

Je vous recommandons d'utiliser la bibliothèque TBXML, il est très petit et a une très bonne performance. Il est également assez facile à saisir, au moins plus facile que NSXMLParser, à mon humble avis.

  1. Il n'y a pas de construction en fonction de remplacer & lt, gt & en Objective C. Vous pouvez envelopper cette chaîne dans le serveur.
1

Essayez: -

[string stringByReplacingOccurrencesOfString:@"&lt" withString:@"<"]; 
+0

Merci. J'ai déjà essayé ceci mais je ne peux pas passer la chaîne à l'analyseur. Je veux dire que l'objet NSStrin ne peut pas être transmis. IT donne une erreur pour ça. Nous devons passer l'objet NSData ou NSMutableData seulement à l'analyseur. – Prazi

+0

ce que j'interprète de la question ur est que ce qui précède est les données xml qui u get ur et qui ... parsing donc je comprends évidemment que U ne peut pas passer chaîne à parser et passe NSData à parser .. mais sur l'analyse syntaxique, XML donnez les cordes et ensuite U peut utiliser la fonction ci-dessus donnée par moi ... et si je me trompe n'importe où dans mon interprétation de votre question .. alors je m'excuse et reprends ma réponse ... mais ensuite j'ai trouvé un lien pour u .. http://stackoverflow.com/questions/1813503/nsxml-replacing-with-lt –