2012-09-26 93 views
5

我正在開發一個應用程序,該應用程序在專用服務器上進行搜索並向用戶顯示結果。問題是NSXLParser無法解析特殊的德語和法語字符。例如:它應該是:(Geschäftsführer) - >我得到的是:(äftsführer)NSXMLParser無法解析特殊字符(德語和法語)

我該如何解決這個問題?

這裏是我的代碼:

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

任何幫助,將不勝感激...提前 感謝

+0

你能給出一個鏈接到你正在解析的XML文件嗎? – kuba

+0

您的'foundCharacters'方法也是錯誤的 - 即使對於單個字符串值,您也可以獲得多個對此函數的調用 – kuba

回答

3

foundCharacters方法應該將字符串附加到的NSMutableString對象,因爲它可以被稱爲多次爲單個值。在didStartElement,初始化的NSMutableString對象(姑且稱之爲elementContentString),那麼這樣做:

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

而在你didEndElement,你就能得到上述內容爲字符串。請注意,你應該使用[NSString stringWithString:self.elementContentString]來製作一個不可變的副本(所以你不要用下一個元素覆蓋它)。

+0

非常感謝!我使用了下面的代碼,它現在可以工作。 if(!elementContentString) elementContentString = [[NSMutableString alloc] initWithString:string];其他 [elementContentString appendString:string]; – Zer0

+0

我有一個導致我的解析器停止的字符。我該如何處理?我的foundCharacters方法看起來就像@kuba建議的那樣。 – marciokoko