How can i parse nested xml using GDataXML parser?

612 views Asked by At

How can I get this <firstName> and <lastName>. I have tried a lot but I have messed up.

<list>
<OrderData HASH="1843180441">
 <id>26</id><customer>
  <CustomerData HASH="882063912"> 
   <id>1</id> 
   <sex>Male</sex>
   <firstName>admin</firstName>
   <lastName>admin</lastName>
   <companyName>Individual</companyName>
   <userName>admin</userName>
   <password>21232f297a57a5a743894a0e4a801fc3</password>    
   <lastLogin>2012-01-26T12:11:38</lastLogin>
   <status>A</status>
   <created>2011-09-28T07:01:47</created>
   <modified>2012-01-26T12:11:38</modified>
   <canChangePassword>Y</canChangePassword>
   <isDeleted>false</isDeleted>
   <abn/>
   <abnBranch/>
 <storeCredit>50000.0</storeCredit>
 <billingAddress>
 <list>
 <AddressData HASH="768553743">
  <id>2</id>
  <firstName>admin</firstName>
  <lastName>admin</lastName>
  <addressLine1>suite: 1307, 9 Yara Street</addressLine1> 
  <addressLine2>dgdgdf</addressLine2>
  <postCode>3000</postCode>
  <suburb>dfgdfg</suburb>
  <city>sadf</city>
  <phone>4456</phone>
  <mobile/>
  <fax/>
  <active>true</active>
  <type>C</type>
  <email>[email protected]</email>
  <log/>
 </AddressData>
 </deliveryAddress>
 <purchaseDate>2011-10-03T03:23:48</purchaseDate>

</OrderData>
<OrderData HASH="1569451006"></OrderData>
<OrderData HASH="1449383081"></OrderData>
<OrderData HASH="1438157618"></OrderData>
<OrderData HASH="269308788"></OrderData>
</list>

Till now I have done this.

 NSLog(@"Enering in the xml file");
 NSArray *getNumberOfOrder = [[xmlDocument rootElement] elementsForName:@"OrderData"];

 for(GDataXMLElement *e in getNumberOfOrder){
   for(int i =0;i<[[e elementsForName:@"customer"]count];i++){
        // All orderd customer name
        NSString  *orderByFirstString = [[[[e elementsForName:@"customer"] objectAtIndex:0] childAtIndex:2] stringValue];
        NSString  *orderByLastString = [[[[e elementsForName:@"customer"] objectAtIndex:0] childAtIndex:3]stringValue];
        orderByString = [NSString stringWithFormat:@"%@ %@",orderByFirstString,orderByLastString];
        NSLog(@"order By String: %@",orderByString);
        }
 }

Cordially appreciate for any help or suggestion.

1

There are 1 answers

7
Vikings On BEST ANSWER

I would try something like this. I would loop through the XML document, and store it in an array.

Notice the NSLog() which will print to the console and will help you see what is going on.

xmlDocument = [[GDataXMLDocument alloc]initWithData:xmlData options:0 error:nil];

NSArray *temp = [xmlDocument.rootElement elementsForName:@"OrderData"];

for(GDataXMLElement *e in temp) {
    [outputArray addObject:e];
    NSLog(@"%@", e);
}

Then I would loop through the array, and do something like this when I wanted to retrieve a result such as the customer's first name.

for (int i = 0; i < [outputArray count]; i++) {
   NSString *firstName = [[[[[[[[outputArray objectAtIndex:i]elementsForName:@"customer"] objectAtIndex:0] elementsForName:@"CustomerData"] objectAtIndex:0] childAtIndex:2]stringValue];
}