-1

It should store this string: Jim's Random topic. But it stops at the single quote. So it stores Jim.

< title >Jim&#039 ;s Random topic&#039 ;s about stupid semicolon&#039 ;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.

Jim Clermonts
  • 1,694
  • 8
  • 39
  • 94

1 Answers1

0

Yes it's working now. I've updated the answer above.

Jim Clermonts
  • 1,694
  • 8
  • 39
  • 94