2013-12-05 4 views
0

Я пытаюсь разобрать xml, у которого есть один корневой элемент с 2 дочерними элементами с тем же именем. Однако они продолжают объединяться вместе. Как я могу это исправить? Вот мой код до сих порАнализ xml-ответа с использованием NSXml

-

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

    element = elementName; 

    if([element isEqualToString:@"bustime-response"]){ 
     self.item = [[NSMutableDictionary alloc]init]; 
     self.direction =[[NSMutableString alloc]init]; 

    } 

} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    if ([element isEqualToString:@"dir"]){ 
     string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
     [self.direction appendString:string]; 
    } 
} 
+0

Я этот [эта ссылка] [1] может вам помочь. [1]: http://stackoverflow.com/a/15059421/2869784 –

ответ

0

Попробуйте это работает для меня:

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

    if ([element isEqualToString:@"bustime-response"]) 
    { 
     elementFound = YES; 

     if (self.item) 
      self.item = nil; 
     self.item = [[NSMutableDictionary alloc]init]; 
     if (self.direction) 
      self.direction = nil; 
     self.direction =[[NSMutableString alloc]init]; 
    } 
} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if (elementFound) 
    { 
     if ([element isEqualToString:@"dir"]){ 
      string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
      [self.direction appendString:string]; 
     } 
     //Add another if with the tag you want to retrieve the data from here 
    } 
} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([element isEqualToString:@"bustime-response"]) 
    { 
     elementFound = NO; 
     // self.receivedDataArray - main array to store all of your dictionary 
     [self.receivedDataArray addObject: self.direction]; 
      [self.receivedDataArray addObject: self.item]; 
     self.direction = nil; 
      self.item = nil; 
    } 
} 

Как вы видите, вы должны добавить еще одну переменную BOOL elementFound и NSMutableArray receivedDataArray для хранения всех данные. Дайте мне понять, дайте мне знать, это работает для вас. Помните, что добавление NSLogs для отладки полезно, это очень помогает.

+0

Я попытался выше решение, и оно до сих пор не работает. Я также пробовал nslog, и кажется, что значение дочернего элемента назначается 5 раз. –

+0

Я не знаю, как выглядит ваш XML-файл. Этот код выше подходит для меня, попробуйте добавить NSLog в парсер: foundCharacters: метод внутри if (elementFound) и if ([element isEqualToString) - NSLog (@ "found:% @", string) – Greg

Смежные вопросы