2012-09-26 12 views
5

Sto lavorando su un'app, che effettua una ricerca su un server privato e mostra i risultati all'utente. Il problema è che NSXLParser non può analizzare i caratteri speciali tedeschi e francesi. Ad esempio: dovrebbe essere: (Geschäftsführer) -> quello che ottengo è: (äftsführer)NSXMLParser non può analizzare caratteri speciali (tedesco e francese)

Come posso risolvere questo?

Ecco il mio codice:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementname isEqualToString:@"results"]) 
    { 
     currentJob = [SearchResult alloc]; 
    } 

} 

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 


    if ([elementname isEqualToString:@"jobTitle"]) 
    { 
     currentJob.jobTitle = currentNodeContent; 
    } 

    if ([elementname isEqualToString:@"location"]) 
    { 
     currentJob.shortAddress = currentNodeContent; 
    } 

    if ([elementname isEqualToString:@"companyName"]) 
    { 
     currentJob.employer = currentNodeContent; 
    } 

    if ([elementname isEqualToString:@"results"]) 
    { 
     [self.jobs addObject:currentJob]; 
     currentJob = nil; 
     currentNodeContent = nil; 
    } 
} 

Qualsiasi aiuto sarebbe molto apprezzato ... Grazie in anticipo

+0

puoi fornire un collegamento al file XML che stai analizzando? – kuba

+0

anche il metodo 'foundCharacters' è sbagliato - puoi ottenere più di una chiamata a questa funzione anche per un singolo valore di stringa – kuba

risposta

3

Il tuo metodo foundCharacters dovrebbe aggiungere la stringa in un oggetto NSMutableString, perché può essere chiamato più volte per un singolo valore. In didStartElement, inizializzare un oggetto NSMutableString (chiamiamolo elementContentString), quindi fare questo:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)chars 
{ 
    [self.elementContentString appendString:chars]; 
} 

E nel tuo didEndElement è possibile ottenere il contenuto sotto forma di stringa. Nota che dovresti fare una copia non modificabile (quindi non sovrascriverlo con l'elemento successivo), usando [NSString stringWithString:self.elementContentString].

+0

Grazie mille! Ho usato il seguente codice e ora funziona. if (! elementContentString) elementContentString = [[NSMutableString alloc] initWithString: string]; else [elementContentString appendString: string]; – Zer0

+0

Ho un carattere che sta causando l'interruzione del mio parser. Come gestirlo? Il mio metodo foundCharacters è simile a quello suggerito da @kuba. – marciokoko