Parsing XML file with NSXMLParser - getting values
Asked Answered
C

4

10

I've got a XML file which contains some data I would like to use:

<?xml version="1.0" encoding="UTF-8" ?>

<items>
<item name="product" price="19.95" where="store">
This is the first product.
</item>

<item name="product2" price="39.95" where="online">
This is the second product.
</item>

<item name="product3" price="99.95" where="garagesale">
This is the third product.
</item>

</items>

If I made 4 arrays, one for the name, one for the price, one for where it was bought and one for its description, how would I get the data into the arrays?

I figured using NSXMLParser, but couldn't get name, price, where or the description.

I'm stuck on how to do this.

Any help appreciated.

Colpotomy answered 21/5, 2011 at 12:12 Comment(3)
Have you read the guide?Keratoplasty
Possible duplicate of Best approach for XML parsing on the iPhone or Simple XML Parsing or Parsing XML Code on iPhone or Parsing XML in Cocoa or NSXMLParser on iPhone how do I use it?. Take your pick.Loxodromics
This is a good tutorial,but One thing I didn't get help. Can you tell me please that how I can read string "This is the first product".Clog
E
15

First you need to create an object that does the parsing. It will instatiate the NSXMLParser instance, set itself as the delegate for the parser and then call the parse message. It can also be responsible for storing your four result arrays:

NSXMLParser * parser = [[NSXMLParser alloc] initWithData:_data];
[parser setDelegate:self];
BOOL result = [parser parse];

The message you are most interested in implementing in your delegate objects is didStartElement. This guy gets called for each element in your XML file. In this callback you can add your name, price & where attributes to their respective arrays.

- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI
 qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict
{
    // just do this for item elements
    if(![elementName isEqual:@"item"])
        return;

    // then you just need to grab each of your attributes
    NSString * name = [attributeDict objectForKey:@"name"];

    // ... get the other attributes

    // when we have our various attributes, you can add them to your arrays
    [m_NameArray addObject:name];

    // ... same for the other arrays
}
Eviaevict answered 21/5, 2011 at 12:38 Comment(2)
Thanks, I've now got some understanding of NSXMLParser.Colpotomy
@jack-greenhill No problems :)Eviaevict
S
5

To get the value between the tags (e.g. "This is the first product.") you can override - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

Shortridge answered 26/5, 2013 at 16:23 Comment(1)
Can you please elaborate on how to do this? I have the exact requirement .i.e., to get the value between the tags.Reichsmark
S
3

in the follwing method

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {

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

        NSString *name=[attributeDict objectForKey:@"name"];
        NSString *price=[attributeDict objectForKey:@"price"];
        NSString *where=[attributeDict objectForKey:@"where"];
    }
}
Sarene answered 21/5, 2011 at 12:39 Comment(0)
S
0

you have to consider the dictionary of item tag as an array and three tag (name,price and where)as the object at index 0,1,2

Snitch answered 21/5, 2011 at 12:19 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.