Domanda

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?"

È stato utile?

Soluzione

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top