2012-06-25 2 views
0

Я новичок в разработке iphone, я мало разбираюсь в разборе. Но я попробовал следующий код, чтобы получить текст элемента расстояния. Я делаю Xml парсинг следующей ссылке:элементов в разборе XML

http://maps.googleapis.com/maps/api/directions/xml?origin=30.9165904,75.8634752&destination=30.89314000,75.86938000&sensor=true

Пожалуйста, проверьте мой код, который я пробовал:

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

currentElement = [elementName copy]; 
if([currentElement isEqualToString:@"distance"]) 


{ 
     NSLog(@"ENTER IN distance"); 
     text = [[NSMutableString alloc]init]; 

    { 
     dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:text,@"text",nil]; 
    } 

    } 

} 


-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
    { 
     if ([currentElement isEqualToString:@"text"]) 
    { 
     [dictionary setObject:text forKey:currentElement]; 
     [text appendString:string]; 
     NSLog(@"text....%@",text); 
    } 
} 


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

{

if ([elementName isEqualToString:@"distance"]) 
{ 
    [distanparsingarray addObject:dictionary]; 

} 

}

By using above method I am getting the text both of distance and duration. But I want only distance text. Please tell me what I am doing wrong in above code. 

спасибо заранее.

+0

http://maps.googleapis.com/maps/api/directions/xml?origin=30.9165904,75.8634752&destination=30.89314000,75.86938000&sensor=true – vishal

ответ

0

Вам нужно управлять этим способом. Добавить переменную BOOL на уровне класса. Установите его, когда вы идентифицируете currentElement как расстояние. Внутри найденных символов добавьте строку в текст только в том случае, если выше BOOL истинно. Сделать этот BOOL ложным в didEndElement, когда currentElement не равен расстоянию.

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes: 
(NSDictionary *)attributeDict 
{ 
    currentElement = [elementName copy]; 
    if([currentElement isEqualToString:@"distance"]) 
    { 
     flag = TRUE; //created at class level. 
     NSLog(@"ENTER IN distance"); 
     text = [[NSMutableString alloc]init];  
     { 
       dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:text,@"text",nil]; 
     }  
    } 
} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if ([currentElement isEqualToString:@"text"] && flag == TRUE) 
    { 
     [dictionary setObject:text forKey:currentElement]; 
     [text appendString:string]; 
     NSLog(@"text....%@",text); 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI: 
(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqualToString:@"distance"]) 
    { 
     [distanparsingarray addObject:dictionary]; 
     flag = FALSE; 
    } 
} 
Смежные вопросы