2014-09-02 3 views
0

, поэтому у меня есть XML-файл с данными из множества экземпляров объекта. Я разбор этого файла, но только хочу, чтобы данные с элементом тегом «Content»Как разбирать XML-файл, захватывая данные из определенных элементов

Я использую NSXMLParser, поэтому у меня есть методы parserDidStartDocument, didStartElement, foundCharacters и didEndElement

Так вот моя текущий реализация

В заголовке:

@property (strong) NSMutableArray* AssetJSONObjects; 

В реализации:

бух

l grabContent = NO; 

- (void) parserDidStartDocument:(NSXMLParser *)parser { 
    NSLog(@"parserDidStartDocument"); 
    self.AssetJSONObjects = [NSMutableArray new]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { 

    NSLog(@"didStartElement --> %@", elementName); 
    if([elementName isEqual:@"Content"]) 
    { 
     grabContent = YES; 
    } 
} 

-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    NSLog(@"foundCharacters --> %@", string); 
    if(grabContent) 
    { 
     [self.AssetJSONObjects addObject:string]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 

    NSLog(@"didEndElement --> %@", elementName); 
    if(grabContent) 
    { 
     grabContent = NO; 
    } 
} 

- (void) parserDidEndDocument:(NSXMLParser *)parser { 
    NSLog(@"parserDidEndDocument"); 
} 

Так вот мой вопрос: так что я объявляю/инициализацию моего массива, AssetJSONObjects законных? Является ли способ инициализировать мой bool grabContent законным? Есть ли лучший способ захватить данные из определенных тегов?

ответ

0

Пошел дешевый маршрут, просто отслеживал глобальной булевы и установить его, если тег был найден

соответствующий код:

BOOL grabContent = NO; 

- (void) parserDidStartDocument:(NSXMLParser *)parser { 
    self.AssetJSONObjects = [NSMutableArray new]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { 
    if([elementName isEqual:@"Content"]) 
    { 
     grabContent = YES; 
    } 
} 

-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    if(grabContent) 
    { 
     NSDictionary *JSONObject = 
     [NSJSONSerialization JSONObjectWithData: [string dataUsingEncoding:NSUTF8StringEncoding] 
             options: NSJSONReadingMutableContainers 
              error: nil]; 
     if (JSONObject) 
     { 
      [self.AssetJSONObjects addObject:JSONObject]; 
     } 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if(grabContent) 
    { 
     grabContent = NO; 
    } 
} 

- (void) parserDidEndDocument:(NSXMLParser *)parser { 
    self.notifications = [self convertRawJSONToNotifications:self.AssetJSONObjects]; 
    if(self.notifications != nil) 
    { 
     self.notificationCompletionHandler(self.notifications, self.numNewNotifications); 
    } 
} 
Смежные вопросы