2013-12-18 2 views
0

Данные поступают плавно.UITableView XML Parser

Но проблемы имеют турецкие символы.

должен прийти, как "Düzce", но "ÜZCE" приходит .. И

"Акчакоджа" клетка зрения "çakoca" приходит ..

XML URL: http://bykrkc.com/test.xml

XMLParser.m ;

#import <Foundation/Foundation.h> 
#import "XMLParser.h" 
#import "XMLFlightList.h" 

@implementation XMLParser 
@synthesize ucakList = _ucakList; 

NSMutableString *currentNodeContent; 
NSXMLParser *parser; 
XMLFlightList *currentFlight; 
bool isStatus; 

-(id) loadXMLByUrl:(NSString *)urlString{ 
    _ucakList = [[NSMutableArray alloc] init]; 
    NSError *error; 
    NSURL *url =[NSURL URLWithString:urlString]; 
    NSString * dataString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; 
    NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 

    parser =[[NSXMLParser alloc] initWithData:data]; 

    parser.delegate = self; 
    [parser parse]; 
    return self; 

    //[NSString stringWithFormat:@"%@",data]; 
} 

-(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:@"sehirler"]) 
    { 
     currentFlight = [XMLFlightList alloc]; 
     isStatus = YES; 
    } 
} 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 
    if(isStatus){ 

     if([elementName isEqualToString:@"ad"]){ 
      currentFlight.name = currentNodeContent; 
     } 

    } 
    if([elementName isEqualToString:@"sehirler"]){ 
     [self.ucakList addObject:currentFlight]; 
     currentFlight =nil; 
     currentNodeContent = nil; 
    } 
} 
@end 

XMLParser.h;

#import <Foundation/Foundation.h> 

@interface XMLParser : NSObject<NSXMLParserDelegate> 
@property (strong,readonly) NSMutableArray *ucakList; 
-(id) loadXMLByUrl:(NSString *)urlString; 
@end 

Результатж;

2013-12-18 15:49:21.505 tableview01[7663:70b] ÇORUM 
2013-12-18 15:49:21.507 tableview01[7663:70b] İSTANBUL 
2013-12-18 15:49:21.507 tableview01[7663:70b] ÖMERLİ 
2013-12-18 15:49:21.508 tableview01[7663:70b] ÜZCE -> Problem True: DÜZCE 
2013-12-18 15:49:21.508 tableview01[7663:70b] çakoca -> Problem True: Akçakoca 
2013-12-18 15:49:26.156 tableview01[7663:70b] ÇORUM 

Результат Изображение: http://oi42.tinypic.com/2z9mgza.jpg

ответ

1

Ваша проблема в -(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string методы. Этот метод можно назвать более одного раза для каждого тега. Попробуйте изменить код:

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

Как альтернатива можно использовать XMLConverter для конвертирования XML в NSDictionary.

Этот код:

[XMLConverter convertXMLURL:[NSURL URLWithString:@"http://bykrkc.com/test.xml"] completion:^(BOOL success, NSMutableDictionary *dictionary, NSError *error) { 
    NSArray *elements = dictionary[@"DocumentElement"][@"sehirler"]; 
    for (NSDictionary *dic in elements) { 
    NSLog(@"%@", dic[@"ad"]); 
    } 
}]; 

выполнен с результатом:

2013-12-18 18:00:46.037 test[690:70b] ÇORUM 
2013-12-18 18:00:46.038 test[690:70b] İSTANBUL 
2013-12-18 18:00:46.038 test[690:70b] ÖMERLİ 
2013-12-18 18:00:46.039 test[690:70b] DÜZCE 
2013-12-18 18:00:46.039 test[690:70b] Akçakoca 
+0

Не работает :('[currentNodeContent appendString: [строка stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]]; NSLog (@"% @ ", currentNodeContent);' но '2013-12-18 16: 28: 40.790 tableview01 [8320: 70b] (null)' – bykrkc

+0

@alikarakoc yes, вторая проблема в парсере '- (void): (NSXMLParser *) parser didEndElement : (NSString *) elementName namespaceURI: (NSString *) namespac eURI qualifiedName: (NSString *) qName' метод, в строке 'currentNodeContent = nil;'. Попробуйте использовать обновленный код. –

+0

@alikarakoc и может быть третьей проблемой в парсере '- (void): (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName attributes: (NSDictionary *) attributeDict' , Вы должны использовать 'currentFlight = [[XMLFlightList alloc] init];' или 'currentFlight = [XMLFlightList new];' вместо 'currentFlight = [XMLFlightList alloc];' –