"Parse XML using iPhone SDK"

Mon 11 May 2009

//

//  XMLReader.h

 

#import <UIKit/UIKit.h>

 

@class MSearchItem;

 

@interface XMLReader : NSObject {

@private

MSearchItem *searchItemObj;

NSMutableString *_contentOfCurrentUserSession;

NSMutableArray *searchList;

}

 

@property (nonatomic, retain) MSearchItem *searchItemObj;

@property (nonatomic, retain) NSMutableString *contentOfCurrentUserSession;

@property (nonatomic, retain) NSMutableArray *searchList;

 

-(void)parseXMLFileAtURL:(NSURL *)URL parseXMLFile:(NSData *)fileData parseError:(NSError **)error;

 

@end

 
 

//

//  XMLReader.m

 

#import "XMLReader.h"

#import "MSearchItem.h"

 

 

@implementation XMLReader

 

@synthesize searchItemObj;

@synthesize contentOfCurrentUserSession = _contentOfCurrentUserSession;

@synthesize searchList;

 

-(void)parseXMLFileAtURL:(NSURL *)URL parseXMLFile:(NSData *)fileData parseError:(NSError **)error

{

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];

//set self as deletegate of the parser so that it will receive the parser deletegate methods callback.

[parser setDelegate:self];

// Depending on the XML document you're parsing, you may want to enable these features of NSXMLParser.

[parser setShouldReportNamespacePrefixes:NO];

[parser setShouldResolveExternalEntities:NO];

[parser parse];

NSError *parserError = [parser parserError];

if(parserError && error)

{

*error = parserError;

}

[parser release];

}

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

attributes:(NSDictionary *)attributeDict

{

    if (qName) {

        elementName = qName;

    }

    if ([elementName isEqualToString:@"searchList"] ) {

searchList = [[NSMutableArray alloc] init];

}    

    if ([elementName isEqualToString:@"searchItem"] ) {

        self.searchItemObj = [[MSearchItem alloc] init];

    return;

    }

 

    self.contentOfCurrentUserSession = [[NSMutableString alloc] init];

}

 

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

{     

    if (qName) {

        elementName = qName;

    }

 

    if ([elementName isEqualToString:@"searchId"]) {

        self.searchItemObj.searchId = [self.contentOfCurrentUserSession intValue];

        [self.contentOfCurrentUserSession release];

    }

    

    if ([elementName isEqualToString:@"engine_name"]) {

        self.searchItemObj.engine_name = self.contentOfCurrentUserSession;

        [self.contentOfCurrentUserSession release];

    }

if ([elementName isEqualToString:@"icon_url"]) {

        self.searchItemObj.icon_url = self.contentOfCurrentUserSession;

        [self.contentOfCurrentUserSession release];

    }

if ([elementName isEqualToString:@"search_string_prefix"]) {

        self.searchItemObj.search_string_prefix = self.contentOfCurrentUserSession;

//NSLog(self.searchItemObj.search_string_prefix);

        [self.contentOfCurrentUserSession release];

    }

if ([elementName isEqualToString:@"search_delimiter"]) {

        self.searchItemObj.search_delimiter = self.contentOfCurrentUserSession;

        [self.contentOfCurrentUserSession release];

    }

if ([elementName isEqualToString:@"search_string_suffix"]) {

        self.searchItemObj.search_string_suffix = self.contentOfCurrentUserSession;

        [self.contentOfCurrentUserSession release];

    }

if ([elementName isEqualToString:@"searchItem"] ) {

[searchList addObject:searchItemObj];

}

}

 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

if(string){

NSString *firstFour = [string substringToIndex:1]; 

if([firstFour isEqualToString:@"\n"]){

return;

}

[self.contentOfCurrentUserSession appendString:string];

}

}

 

- (void)dealloc {

[_contentOfCurrentUserSession release];

[super dealloc];

}

 

@end