2012-11-09 2 views
0

XML에서 문자열을 가져 오려고합니다. NSData * xmlData = [request responseData];액센트 단어로 잘못된 값을 반환하는 NSMutableDictionary

NSString *stringData = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding]; 

loginParsingDelegate *loginResultParser = [[loginParsingDelegate alloc] init]; 
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData]; 
[parser setDelegate:loginResultParser]; 
[parser parse]; 

NSString *filePath = [NSString stringWithFormat:@"%@/conf.plist", DOCUMENTS_FOLDER] ; 
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] init]; 
    NSString *city = [parsingResult objectForKey:@"city"]; 

하지만 악센트가있을 때,이 잘못 ... 예를 얻을 : 나는 "아오 파울로"

무슨 일이야납니다 상파울루 = "상파울루"하지만 상 파울로를? XML은 당신이 당신의 위임에 제대로 문자를 처리하지 않는 것처럼

<city>São Paulo</city> 

이 보이는 간단한 XML 문자열로 코드를 실행 한

+2

스 니펫은 문제와 관련이 없습니다. 파싱 ​​코드를 보여 주시겠습니까? – hoha

+0

업데이트 됨 스 니펫 – Ladessa

+0

이 데이터는 어떻게 보입니까? 사전을 로깅하고 있습니까? UI에 표시 하시겠습니까? 디버거를 들여다 보면? – Chuck

답변

4

... 올바른 반환합니다. 이 XML의 경우 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string은 실제로 두 번 호출됩니다. 처음에는 "S"로, 두 번째로는 "Paul Paulo"로 호출됩니다. 어쨌든이 방법은 한 번에 전체 문자열을 제공하지는 않으므로 이러한 상황을 처리해야합니다.

파서 : foundCharacters :

은 현재 요소의 모든 문자 또는 일부를 나타내는 캐릭터 라인 과의 대리자를 제공하기 위해 파서 객체에 의해 송신됩니다.

UPDATE :

극단적으로 간단한 예. 우리가 파서이 하지 어떤 XML을 구문 분석하는 일반적인 코드입니다이

@implementation ParserClass { 
    NSMutableString *elementText; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    elementText = nil; // we are not handling elements other than "city" 
    if ([elementName isEqualToString:@"city"]) { 
     elementText = [NSMutableString new]; // prepare an empty string for city name 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    [elementText appendString:string]; // append new characters to the element text 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    // element did end - string now contains text of the element 
    if ([elementName isEqualToString:@"city"]) { 
     NSString *cityName = [elementText copy]; // now we have a full city name 
     ... 
    } 
} 

... 

@end 

주처럼 만들 수있는 XML을

<cities> 
    <city>São Paulo</city> 
    <city>Rio de Janeiro</city> 
    <city>Salvador</city> 
</cities> 

을 감안할 때. SAX 파싱이 어떻게 작동하는지 이해한다면 당연히 하나를 쓸 수 있습니다.

+0

예이지만 S – Ladessa

+0

withou, 파올로 AO가 foundcharcters 방법에서 제 I이 아닌 – Ladessa

+0

"시다"에 S를받은 경우 ([isEqualToString가 elementName "시다"@]) { appDelegate.cidade = 문자열; } – Ladessa

관련 문제