Question

I want to parse this XML:

<?xml version="1.0" encoding="UTF-8"?>
<eventdata>
    <rev></rev>
        <event>
            <id>  </id>
            <name></name>
            <thumb> </thumb>
            <eimage></eimage>
            <artists></artists>
            <date></date>
            <time> </time>
            <cost> </cost>
            <discount> </discount>
            <gmap> </gmap>
            <web>  </web>
            <desc> </desc>
            <file>
                <src> </src>
                <size> </size>
            </file>
            <vtype></vtype>
            <address></address>
            <area></area>
            <city></city>
            <pcode></pcode>
            <lmark></lmark>
            <likes></likes>
            <hl></hl>
            <pref></pref>
            <img>  <src> </src>
                <size> </size></img>
            <vid>  <src> </src>
                <size> </size></vid>

        </event>
        <event>
            <id>  </id>
            <name></name>
            <thumb> </thumb>
            <eimage></eimage>
            <artists></artists>
            <date></date>
            <time> </time>
            <cost> </cost>
            <discount> </discount>
            <gmap> </gmap>
            <web>  </web>
            <desc> </desc>
            <file>
                <src> </src>
                <size> </size>
            </file>
            <vtype></vtype>
            <address></address>
            <area></area>
            <city></city>
            <pcode></pcode>
            <lmark></lmark>
            <likes></likes>
            <hl></hl>
            <pref></pref>
            <img>  <src> </src>
                <size> </size></img>
            <vid>  <src> </src>
                <size> </size></vid>

        </event>
        </eventdata>

I tried this code:

- (void)viewDidLoad
{
    [super viewDidLoad];
    _currentParsedCharacterData = [[NSMutableString alloc] init];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"NewYearPartyData" ofType:@"xml"];
    NSData *data = [[NSData alloc] initWithContentsOfFile:path];

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
    [parser setDelegate:self];

    // parsing...
    BOOL success = [parser parse];


    // test the result
    if (success) {
        //NSLog(@"No errors - user count : %i", [parser [users count]]);
        NSLog(@"Success");
        // get array of users here
        //  NSMutableArray *users = [parser users];
    } else {
        NSLog(@"Error parsing document!");
    }
 }

#pragma mark - NSXMLParser delegate methods

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    if ([elementName isEqualToString:@"event"]) {
        NSLog(@"user element found – create a new instance of User class...");
        //user = [[User alloc] init];
        //We do not have any attributes in the user elements, but if
        // you do, you can extract them here:
        // user.att = [[attributeDict objectForKey:@"<att name>"] ...];
        NSLog(@"Event Name = %@", [attributeDict objectForKey:@"name"]);
        NSLog(@"attributeDict = %@", attributeDict);
    }
    if ([elementName isEqualToString:@"name"]) {
        NSLog(@"attributeDict = %@", attributeDict);
        NSLog(@"Event Name = %@", [attributeDict objectForKey:@"name"]);
        NSLog(@"elementName = %@", elementName);
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    NSLog(@"didEndElement");
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    NSLog(@"value of element %@", string); 
}

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
}

Someone who is good in NSXMLParser - I request them to explain to me the flow.

My basic question is "How to access data of event i.e., id, name, thumb etc?"

Was it helpful?

Solution

NSXMLParsing is the easiest way to parse data. You can easily access data of event i.e., id, name, thumb etc using the delegate method

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

}

You can create a NSOBject class named Event. Here is my code

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if ([elementname isEqualToString:@"id"])
        {
            event.id = currentNodeContentChapters;
        }
        if ([elementname isEqualToString:@"name"])
        {

            event.name = currentNodeContentChapters;
        }
        if ([elementname isEqualToString:@"thumb"])
        {
            event.thumb = currentNodeContentChapters;
        }
        if ([elementname isEqualToString:@"eiimage"])
        {
            event.eiimageUrl = currentNodeContentChapters;
        }
       -------------------
       --------------- 
}

Hopefully it will work for you .

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top