ViewController.h
#import <UIKit/UIKit.h>
#define ITEM_NAME @"name"
#define FOOD @"food"
#define ITEM_PRICE @"price"
#define ITEM_DESCRIPTION @"description"
#define ITEM_CALORIES @"calories"
@interface ViewController : UIViewController<NSXMLParserDelegate,UITableViewDataSource,UITableViewDelegate>
{
IBOutlet UITableView *tblxml;
NSMutableArray *arraydata;
}
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
{
NSXMLParser *parser;
NSMutableDictionary *currentData;
NSString *currentElement;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:@"food" ofType:@"xml"];
parser = [[NSXMLParser alloc]initWithContentsOfURL:[NSURL fileURLWithPath:xmlFilePath]];
[parser setDelegate:self];
[parser parse];
if (!arraydata)
{
arraydata = [[NSMutableArray alloc]init];
}
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDic
{
NSLog(@"Did start element");
currentElement = elementName;
if ( [elementName isEqualToString:FOOD])
{
if (!currentData) {
currentData = [[NSMutableDictionary alloc]init];
}
NSLog(@"found rootElement");
return;
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@"Did end element");
if ([elementName isEqualToString:ITEM_PRICE]) {
currentElement = elementName;
}else if ([elementName isEqualToString:ITEM_NAME]){
currentElement = elementName; }
else if ([elementName isEqualToString:ITEM_DESCRIPTION]){
currentElement = elementName;
}else if ([elementName isEqualToString:ITEM_CALORIES]){
currentElement = elementName;
}else{
currentElement = @"";
}
if ([elementName isEqualToString:FOOD])
{
if (arraydata == nil) {
arraydata= [[NSMutableArray alloc]init];
}
[arraydata addObject:[currentData copy]];
[currentData removeAllObjects];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ([string rangeOfString:@"\n"].location == NSNotFound) {
if ([currentElement isEqualToString:ITEM_PRICE]) {
[currentData setObject:string forKey:ITEM_PRICE];
}else if ([currentElement isEqualToString:ITEM_NAME]){
[currentData setObject:string forKey:ITEM_NAME];
}else if ([currentElement isEqualToString:ITEM_DESCRIPTION]){
[currentData setObject:string forKey:ITEM_DESCRIPTION];
}else if ([currentElement isEqualToString:ITEM_CALORIES]){
[currentData setObject:string forKey:ITEM_CALORIES];
}
}
}
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
NSLog(@"StartDocument");
}
- (void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"%@",arraydata);
[tblxml reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return arraydata.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
NSDictionary *currentItemDetails = [arraydata objectAtIndex:indexPath.row];
cell.textLabel.text = [currentItemDetails objectForKey:ITEM_NAME];
cell.textLabel.text = [currentItemDetails objectForKey:ITEM_PRICE];
cell.textLabel.text = [currentItemDetails objectForKey:ITEM_DESCRIPTION];
cell.textLabel.text = [NSString stringWithFormat:@"Calories :: %@", [currentItemDetails objectForKey:ITEM_CALORIES]];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 125;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
#import <UIKit/UIKit.h>
#define ITEM_NAME @"name"
#define FOOD @"food"
#define ITEM_PRICE @"price"
#define ITEM_DESCRIPTION @"description"
#define ITEM_CALORIES @"calories"
@interface ViewController : UIViewController<NSXMLParserDelegate,UITableViewDataSource,UITableViewDelegate>
{
IBOutlet UITableView *tblxml;
NSMutableArray *arraydata;
}
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
{
NSXMLParser *parser;
NSMutableDictionary *currentData;
NSString *currentElement;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:@"food" ofType:@"xml"];
parser = [[NSXMLParser alloc]initWithContentsOfURL:[NSURL fileURLWithPath:xmlFilePath]];
[parser setDelegate:self];
[parser parse];
if (!arraydata)
{
arraydata = [[NSMutableArray alloc]init];
}
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDic
{
NSLog(@"Did start element");
currentElement = elementName;
if ( [elementName isEqualToString:FOOD])
{
if (!currentData) {
currentData = [[NSMutableDictionary alloc]init];
}
NSLog(@"found rootElement");
return;
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@"Did end element");
if ([elementName isEqualToString:ITEM_PRICE]) {
currentElement = elementName;
}else if ([elementName isEqualToString:ITEM_NAME]){
currentElement = elementName; }
else if ([elementName isEqualToString:ITEM_DESCRIPTION]){
currentElement = elementName;
}else if ([elementName isEqualToString:ITEM_CALORIES]){
currentElement = elementName;
}else{
currentElement = @"";
}
if ([elementName isEqualToString:FOOD])
{
if (arraydata == nil) {
arraydata= [[NSMutableArray alloc]init];
}
[arraydata addObject:[currentData copy]];
[currentData removeAllObjects];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ([string rangeOfString:@"\n"].location == NSNotFound) {
if ([currentElement isEqualToString:ITEM_PRICE]) {
[currentData setObject:string forKey:ITEM_PRICE];
}else if ([currentElement isEqualToString:ITEM_NAME]){
[currentData setObject:string forKey:ITEM_NAME];
}else if ([currentElement isEqualToString:ITEM_DESCRIPTION]){
[currentData setObject:string forKey:ITEM_DESCRIPTION];
}else if ([currentElement isEqualToString:ITEM_CALORIES]){
[currentData setObject:string forKey:ITEM_CALORIES];
}
}
}
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
NSLog(@"StartDocument");
}
- (void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"%@",arraydata);
[tblxml reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return arraydata.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
NSDictionary *currentItemDetails = [arraydata objectAtIndex:indexPath.row];
cell.textLabel.text = [currentItemDetails objectForKey:ITEM_NAME];
cell.textLabel.text = [currentItemDetails objectForKey:ITEM_PRICE];
cell.textLabel.text = [currentItemDetails objectForKey:ITEM_DESCRIPTION];
cell.textLabel.text = [NSString stringWithFormat:@"Calories :: %@", [currentItemDetails objectForKey:ITEM_CALORIES]];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 125;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
No comments:
Post a Comment