2012-09-26 16 views
5

Estoy trabajando en una aplicación que hace una búsqueda en un servidor privado y muestra los resultados al usuario. El problema es que NSXLParser no puede analizar los caracteres especiales de alemán y francés. Por ejemplo: debería ser: (Geschäftsführer) -> lo que obtengo es: (äftsführer)NSXMLParser no puede analizar caracteres especiales (alemán y francés)

¿Cómo puedo solucionar esto?

aquí es mi código:

- (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; 
    } 
} 

Cualquier ayuda sería muy apreciada ... Gracias de antemano

+0

¿Puedes dar un enlace al archivo XML que estás analizando? – kuba

+0

también su método 'foundCharacters' es incorrecto: puede obtener más de una llamada a esta función incluso para un valor de cadena simple – kuba

Respuesta

3

Su foundCharacters método debe añadir la cadena a un objeto NSMutableString, ya que se pueden llamar varias veces para un solo valor. En didStartElement, inicializar un objeto NSMutableString (vamos a llamarlo elementContentString), a continuación, hacer esto:

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

Y en su didEndElement puede obtener el contenido como una cadena. Tenga en cuenta que debe hacer una copia no mutable de la misma (para que no la sobrescriba con el siguiente elemento), usando [NSString stringWithString:self.elementContentString].

+0

¡Muchas gracias! Usé el siguiente código y funciona ahora. if (! elementContentString) elementContentString = [[NSMutableString alloc] initWithString: string]; else [elementContentString appendString: string]; – Zer0

+0

Tengo un 'carácter que hace que mi analizador se detenga. ¿Cómo manejo eso? Mi método foundCharacters se parece al que sugirió @kuba. – marciokoko

Cuestiones relacionadas