1) I followed this link to create xml. You can download the corresponding api from your github.Link - http://arashpayan.com/blog/2009/01/14/apxml-nsxmldocument-substitute-for-iphoneipod-touch/
2) when the button is pressed:
-(IBAction) btniCloudPressed:(id)sender { // create the document with it's root element APDocument *doc = [[APDocument alloc] initWithRootElement:[APElement elementWithName:@"Properties"]]; APElement *rootElement = [doc rootElement]; // retrieves same element we created the line above NSMutableArray *addrList = [[NSMutableArray alloc] init]; NSString *select_query; const char *select_stmt; sqlite3_stmt *compiled_stmt; if (sqlite3_open([[app getDBPath] UTF8String], &dbconn) == SQLITE_OK) { select_query = [NSString stringWithFormat:@"SELECT * FROM Properties"]; select_stmt = [select_query UTF8String]; if(sqlite3_prepare_v2(dbconn, select_stmt, -1, &compiled_stmt, NULL) == SQLITE_OK) { while(sqlite3_step(compiled_stmt) == SQLITE_ROW) { NSString *addr = [NSString stringWithFormat:@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,0)]]; addr = [NSString stringWithFormat:@"%@#%@",addr,[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,1)]]; addr = [NSString stringWithFormat:@"%@#%@",addr,[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,2)]]; addr = [NSString stringWithFormat:@"%@#%@",addr,[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,3)]]; addr = [NSString stringWithFormat:@"%@#%@",addr,[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,4)]]; addr = [NSString stringWithFormat:@"%@#%@",addr,[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,5)]]; addr = [NSString stringWithFormat:@"%@#%@",addr,[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,6)]]; addr = [NSString stringWithFormat:@"%@#%@",addr,[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,7)]]; //NSLog(@"%@",addr); [addrList addObject:addr]; } sqlite3_finalize(compiled_stmt); } else { NSLog(@"Error while creating detail view statement. '%s'", sqlite3_errmsg(dbconn)); } } for(int i =0 ; i < [addrList count]; i++) { NSArray *addr = [[NSArray alloc] initWithArray:[[addrList objectAtIndex:i] componentsSeparatedByString:@"#"]]; APElement *property = [APElement elementWithName:@"Property"]; [property addAttributeNamed:@"id" withValue:[addr objectAtIndex:0]]; [property addAttributeNamed:@"street" withValue:[addr objectAtIndex:1]]; [property addAttributeNamed:@"city" withValue:[addr objectAtIndex:2]]; [property addAttributeNamed:@"state" withValue:[addr objectAtIndex:3]]; [property addAttributeNamed:@"zip" withValue:[addr objectAtIndex:4]]; [property addAttributeNamed:@"status" withValue:[addr objectAtIndex:5]]; [property addAttributeNamed:@"lastupdated" withValue:[addr objectAtIndex:6]]; [property addAttributeNamed:@"deleted" withValue:[addr objectAtIndex:7]]; [rootElement addChild:property]; [property release]; APElement *fullscore = [APElement elementWithName:@"FullScoreReport"]; [property addChild:fullscore]; [fullscore release]; select_query = [NSString stringWithFormat:@"SELECT AnsNo,Answer,AnswerScore,MaxScore,AnsIndex FROM FullScoreReport WHERE Addr_ID = %@",[addr objectAtIndex:0]]; select_stmt = [select_query UTF8String]; if(sqlite3_prepare_v2(dbconn, select_stmt, -1, &compiled_stmt, NULL) == SQLITE_OK) { while(sqlite3_step(compiled_stmt) == SQLITE_ROW) { APElement *answer = [APElement elementWithName:@"Answer"]; [answer addAttributeNamed:@"AnsNo" withValue:[NSString stringWithFormat:@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,0)]]]; [answer addAttributeNamed:@"Answer" withValue:[NSString stringWithFormat:@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,1)]]]; [answer addAttributeNamed:@"AnswerScore" withValue:[NSString stringWithFormat:@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,2)]]]; [answer addAttributeNamed:@"MaxScore" withValue:[NSString stringWithFormat:@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,3)]]]; [answer addAttributeNamed:@"AnsIndex" withValue:[NSString stringWithFormat:@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiled_stmt,4)]]]; [fullscore addChild:answer]; [answer release]; } sqlite3_finalize(compiled_stmt); } } sqlite3_close(dbconn); NSString *prettyXML = [doc prettyXML]; NSLog(@"\n\n%@",prettyXML); //***** PARSE XML FILE ***** NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Properties.xml" ]; NSData *file = [NSData dataWithBytes:[prettyXML UTF8String] length:strlen([prettyXML UTF8String])]; [file writeToFile:path atomically:YES]; NSString *fileName = [NSString stringWithFormat:@"Properties.xml"]; NSURL *ubiq = [[NSFileManager defaultManager]URLForUbiquityContainerIdentifier:nil]; NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:@"Documents"] URLByAppendingPathComponent:fileName]; MyDocument *mydoc = [[MyDocument alloc] initWithFileURL:ubiquitousPackage]; mydoc.xmlContent = prettyXML; [mydoc saveToURL:[mydoc fileURL]forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { if (success) { NSLog(@"XML: Synced with icloud"); UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"iCloud Syncing" message:@"Successfully synced with iCloud." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; [alert release]; } else NSLog(@"XML: Syncing FAILED with icloud"); }]; }
3) File MyDocument.h
4) File MyDocument.m
5) now in ur appdelegate
- (void)loadData:(NSMetadataQuery *)queryData { for (NSMetadataItem *item in [queryData results]) { NSString *filename = [item valueForAttribute:NSMetadataItemDisplayNameKey]; NSNumber *filesize = [item valueForAttribute:NSMetadataItemFSSizeKey]; NSDate *updated = [item valueForAttribute:NSMetadataItemFSContentChangeDateKey]; NSLog(@"%@ (%@ bytes, updated %@) ", filename, filesize, updated); NSURL *url = [item valueForAttribute:NSMetadataItemURLKey]; MyDocument *doc = [[MyDocument alloc] initWithFileURL:url]; if([filename isEqualToString:@"Properties"]) { [doc openWithCompletionHandler:^(BOOL success) { if (success) { NSLog(@"XML: Success to open from iCloud"); NSData *file = [NSData dataWithContentsOfURL:url];
6) now in the parser method, data is extracted and inserted / updated as necessary in the database.
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)nameSpaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ([elementName isEqual:@"Property"]) { NSLog(@"Property attributes : %@|%@|%@|%@|%@|%@|%@|%@", [attributeDict objectForKey:@"id"],[attributeDict objectForKey:@"street"], [attributeDict objectForKey:@"city"], [attributeDict objectForKey:@"state"],[attributeDict objectForKey:@"zip"],[attributeDict objectForKey:@"status"],[attributeDict objectForKey:@"lastupdated"],[attributeDict objectForKey:@"deleted"]); }