It should store this string: Jim's Random topic. But it stops at the single quote. So it stores Jim.
< title >Jim' ;s Random topic' ;s about stupid semicolon' ;s < /title>
XMLParser.m (Simplified)
typedef enum MESSAGE_TYPE {
TITLE = 1,
NOTFIRSTTIME = 2,
SEMICOLON = 3
} Message_Type;
NSString * title;
NSXMLParser *rssParser;
Message_Type messageType;
+ (void)initialize {
messageType = UNDEFINED;
}
- (void) parseXML:(NSData *) rawxml{
NSString* myString;
NSData *data;
myString = [[NSString alloc] initWithData:rawxml encoding:NSASCIIStringEncoding];
myString = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
data = [myString dataUsingEncoding:NSUTF8StringEncoding];
rssParser = [[NSXMLParser alloc] initWithData:data];
[rssParser setDelegate:self];
[rssParser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"title"]) {
messageType = TITLE;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if(messageType == SEMICOLON) {
title = [title stringByAppendingString:string];
messageType = NOTFIRSTTIME;
}
if(messageType == NOTFIRSTTIME) {
if([string isEqualToString:@"'"]) {
title = [title stringByAppendingString:string];
messageType = SEMICOLON;
}
}
if(messageType == TITLE) {
title = string;
NSLog(@"title = %@",title);
messageType = NOTFIRSTTIME;
}
}
Update: I've solved my own problem with a loop that uses an Enum and appends the string when it finds a semicolon. Thanks anyway guys.