XML Response to NSArray

I am parsing the xml file to get the contents of the two nodes "tagid" and "mac". How to store this content in two arrays, one for "tagid" and one for "mac"?

The parser works. Thank you in advance

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { self.currentElement = elementName; self.currentElement2 = elementName; if ([self.currentElement isEqualToString:@"mac"]) { self.currentTitle = [NSMutableString string]; } if ([self.currentElement2 isEqualToString:@"tagid"]) { self.currentTitle2 = [NSMutableString string]; } } -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([self.currentElement isEqualToString:@"mac"]) { NSLog(@"%@", self.currentTitle); } if ([self.currentElement2 isEqualToString:@"tagid"]) { NSLog(@"%@", self.currentTitle2); } self.currentTitle = nil; self.currentElement = nil; self.currentTitle2 = nil; self.currentElement2 = nil; } -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if (!self.currentElement) return; if ([self.currentElement isEqualToString:@"mac"]) { self.currentTitle = string; } if (!self.currentElement2) return; if ([self.currentElement2 isEqualToString:@"tagid"]) { self.currentTitle2 = string; } } - (IBAction)aktualisieren:(id)sender { NSURL *xmlURL = [[NSURL alloc] initWithString:@"http://mysite/mycontent"]; parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; [parser setDelegate:self]; [parser parse]; } 

Thank you for your responses:)

+4
source share
5 answers

You need two different arrays

 -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { self.currentElement = elementName; self.currentElement2 = elementName; if ([self.currentElement isEqualToString:@"mac"]) { self.currentTitle = [NSMutableString string]; NSMutableArray *macArray = [NSMutableArray alloc] init]; } if ([self.currentElement2 isEqualToString:@"tagid"]) { self.currentTitle2 = [NSMutableString string]; NSMutableArray *tagIdArray = [NSMutableArray alloc] init]; } } -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([self.currentElement isEqualToString:@"mac"]) { NSLog(@"%@", self.currentTitle); [macArray addObject:self.currentTitle]; } if ([self.currentElement2 isEqualToString:@"tagid"]) { NSLog(@"%@", self.currentTitle2); [tagIdArray addObject:self.currentTitle2]; } self.currentTitle = nil; self.currentElement = nil; self.currentTitle2 = nil; self.currentElement2 = nil; } 
+2
source

create two arrays in parseStartDocument . one for mac-MacArray, one for tagid-tagArray.

in didEndElement , check the element and add self.currentTitle to that damn array.

+5
source

In .h, declare two arrays tagArray and macArray. In viewDidLoad, both arrays are allocated.

 -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([self.currentElement isEqualToString:@"mac"]) { [macArray addObject:self.currentTitle]; NSLog(@"%@", self.currentTitle); } if ([self.currentElement2 isEqualToString:@"tagid"]) { [macArray addObject:self.currentTitle2]; NSLog(@"%@", self.currentTitle2); } self.currentTitle = nil; self.currentElement = nil; self.currentTitle2 = nil; self.currentElement2 = nil; } 
+3
source

Declare two mutable arrays:

 NSMutableArray *macArray , *tagidArray; macArray = [[NSMutableArray alloc]init]; tagidArray = [[NSMutableArray alloc]init]; -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([self.currentElement isEqualToString:@"mac"]) { [macArray addObject:self.currentTitle]; NSLog(@"%@", self.currentTitle); } if ([self.currentElement2 isEqualToString:@"tagid"]) { [tagidArray addObject:self.currentTitle2]; NSLog(@"%@", self.currentTitle2); } } -(void)parserDidEndDocument{ //Do something as parsing has been completed here and your values are in two arrays } 

Find a detailed parsing example here

0
source

By the way, if one of them was a long string, it can be divided into several calls on foundCharacters . Thus, foundCharacters should always add strings, not set strings:

 -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if (!self.currentElement) return; if ([self.currentElement isEqualToString:@"mac"]) { [self.currentTitle appendString:string]; } if (!self.currentElement2) return; if ([self.currentElement2 isEqualToString:@"tagid"]) { [self.currentTitle2 appendString:string]; } } 
0
source

Source: https://habr.com/ru/post/1483138/


All Articles