2012-09-26 4 views
5

Ich arbeite an einer App, die auf einem privaten Server sucht und dem Benutzer die Ergebnisse anzeigt. Das Problem ist, dass NSXLParser die speziellen deutschen und französischen Zeichen nicht analysieren kann. Zum Beispiel: es sollte: (Geschäftsführer) -> was ich bekomme ist: (äfsführer)NSXMLParser kann keine Sonderzeichen parsen (Deutsch & Französisch)

Wie kann ich das beheben?

hier ist mein Code:

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

Jede Hilfe wäre sehr willkommen ... Vielen Dank im Voraus

+0

können Sie einen Link zu der zu analysierenden XML-Datei angeben? – kuba

+0

auch Ihre 'foundCharacters' Methode ist falsch - Sie können mehr als einen Aufruf an diese Funktion auch für einen einzelnen String-Wert erhalten – kuba

Antwort

3

Ihre foundCharacters Methode sollte die Zeichenfolge zu einem NSMutableString Objekt anhängen, weil sie aufgerufen werden kann mehrmals für einen einzelnen Wert. In didStartElement initialisieren ein NSMutableString Objekt (nennen wir es elementContentString), dann tun:

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

Und in Ihrem didEndElement Sie den Inhalt als String bekommen. Beachten Sie, dass Sie eine nicht veränderbare Kopie davon erstellen sollten (damit Sie sie nicht mit dem nächsten Element überschreiben), indem Sie [NSString stringWithString:self.elementContentString] verwenden.

+0

Vielen Dank! Ich habe den folgenden Code verwendet und es funktioniert jetzt. if (! elementContentString) elementContentString = [[NSMutableString-Zuweisung] initWithString: string]; sonst [elementContentString appendString: string]; – Zer0

+0

Ich habe ein Zeichen, das meinen Parser stoppt. Wie gehe ich damit um? Meine foundCharacters-Methode sieht genauso aus wie die von @kuba vorgeschlagene Methode. – marciokoko