I've made an update to the XmlParser parser class so that you can pass in an array of objects and the xml you are looking for. Make the following additions to the indicated files and you will be able to accomplish what you are looking for:
XmlParser.h
-(NSString *)arrayToXml:(NSArray *)objects andTag:(NSString *)tag inNameSpace:(NSString *)nameSpace;
XmlParser.m
- (void)addArray:(NSArray *)objects toParentElement:(GDataXMLElement *)parent
{
for (id object in objects) {
const char *objectName = class_getName([object class]);
NSString *objectNameStr = [[NSString alloc] initWithBytes:objectName length:strlen(objectName) encoding:NSASCIIStringEncoding];
GDataXMLElement * objectElement = [GDataXMLNode elementWithName:objectNameStr];
NSMutableDictionary * propertyDic = [XmlParser propertDictionary:object];
NSString *nodeValue = [NSString stringWithFormat:@"%@",@""];
for (NSString *key in propertyDic) {
if ([object valueForKey:key] != nil) {
if ([[object valueForKey:key] isKindOfClass:[NSSet class]]) {
GDataXMLElement * parentElement = [GDataXMLNode elementWithName:key];
[self addSet:[object valueForKey:key] toParentElement:parentElement];
[objectElement addChild:parentElement];
} else {
if ([[propertyDic objectForKey:key] isEqualToString:@"l"]) {
nodeValue = [NSString stringWithFormat:@"%llu",[[object valueForKey:key] unsignedLongLongValue]];
} else if ([[propertyDic objectForKey:key] isEqualToString:@"i"]) {
nodeValue = [NSString stringWithFormat:@"%d",[object valueForKey:key]];
} else {
nodeValue = [NSString stringWithFormat:@"%@",[object valueForKey:key]];
}
GDataXMLElement * childElement = [GDataXMLNode elementWithName:key stringValue:nodeValue];
[objectElement addChild:childElement];
}
}
}
[parent addChild:objectElement];
[objectNameStr release];
}
}
//convert object to xml string, you could modify the type maping to fit your requirement,
//the reperesentation of type could be found in objective-c runtime reference.
-(NSString *)arrayToXml:(NSArray *)objects andTag:(NSString *)tag inNameSpace:(NSString *)nameSpace
{
GDataXMLElement *parent = [GDataXMLNode elementWithName:tag];
[parent addNamespace:[GDataXMLNode namespaceWithName:nil stringValue:nameSpace]];
[self addSet:objects toParentElement:parent];
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithRootElement:parent];
NSData *xmlData = document.XMLData;
NSString *xmlString = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding];
NSString *bodyString = [xmlString substringFromIndex:21];
NSString *headerString = [XmlHeaderHelper generateXmlHeader:tag and:nameSpace];
xmlString = [NSString stringWithFormat:@"%@%@", headerString, bodyString];
[document release];
return xmlString;
}
So you will make the following call passing in an array of objects:
NSArray *contacts = [NSArray arrayFromObjects: contact1, contact2, nil];
[parser arrayToXml:contacts andTag:@"Defn" inNameSpace:@"http://mycontacts.com"]