-1

When I try to parse the XML file using NSXMLParser I couldnot parse all the elements .. XML response looks like this:

<List>
   <Details>
          <AId>1</AId>
          <Date>10/31/2012</Date>
          <Time>11:00 AM</Time>
       <User>
          <Employee>
              <Name>Rosy</Name>
              </Employee>
              <Company>
                  <Customer>
                     <CustName>Williams</CustName>
                     <CustPhone>1232322</CustPhone>
                 </Customer>
             </Company>
       </User>
  </Details>
<Details>
          <AId>2</AId>
          <Date>10/31/2012</Date>
          <Time>11:30 AM</Time>
       <User>
          <Employee>
              <Name>Mary</Name>
              </Employee>
              <Company>
                  <Customer>
                     <CustName>Christopher</CustName>
                     <CustPhone>123233323</CustPhone>
                 </Customer>
             </Company>
       </User>
  </Details>
</List>

How can I get all the elemnts in all the XML tags?

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


if([elementName isEqualToString:@"AList"])
{
    arr=[[NSMutableArray alloc] init];



}
    if([elementName isEqualToString:@"Details"]||[elementName isEqualToString:@"User"])
    {
        drr=[[NSMutableDictionary alloc] init];
    }

srr=[[NSMutableString alloc] init];

} 


-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{


    [srr appendString:string];
}


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

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

        [drr setObject:srr forKey:@"AId"];
        [srr release],srr=nil;
        return;
    }  

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

        [drr setObject:srr forKey:@"Date"];
        [srr release],srr=nil;
       return;    
    }
    if([elementName isEqualToString:@"Time"])
    {

        [drr setObject:srr forKey:@"Time"];
        [srr release],srr=nil;
     return;      
    }
    if([elementName isEqualToString:@"Name"])
    {

        [drr setObject:srr forKey:@"Name"];
        [srr release],srr=nil;
        return;
    }
        if([elementName isEqualToString:@"CustName"])
    {
        [drr setObject:srr forKey:@"CustName"];
        [srr release],srr=nil;


       return;
    }

    if([elementName isEqualToString:@"CustPhone"])
    { 
        [arr addObject:drr]; 

    }    



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

        [drr release];


    }

    [srr release],srr=nil;

}

how can i get it..... couldnnt understand where i am going wrong....

Popeye
  • 11,839
  • 9
  • 58
  • 91
07405
  • 193
  • 4
  • 14
  • Use a proper XML parse, e.g. the DOM parser built into libxml2. It's faster, more lightweight, the only drawback is that it's a C-based library. – Richard J. Ross III Oct 31 '12 at 12:55

1 Answers1

0

you use the following code in DidEndElement method it will help you...

-(void)parser:(NSXMLParser*)parser
didEndElement:(NSString*)elementName
 namespaceURI:(NSString*)namespaceURI
qualifiedName:(NSString*)qualifiedName
{
    if ([elementName isEqualToString:@"list"]) {
        return;
    }
else if ([elementName isEqualToString:@"Details"]){
[yourarray addObject:yourDictionary];
}
    else{
        if (currentElementValue.length>0) {
            [yourDictionary setObject:currentElementValue forKey:elementName];
            currentElementValue = nil;
            NSLog(@"this is the offer details---%@",[yourDictionary description]);
        }
    }
}

-(void)parser:(NSXMLParser*)parser
foundCharacters:(NSString*)string
{
    currentElementValue=[NSString stringWithString:[string stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]];
}
- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
{
    currentElementValue = [[NSMutableString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
}
Virja Rahul
  • 415
  • 2
  • 4
  • 12