The cause is that the addObjects: retains for your currentRole object and not creates a copy from that. You can create your new currentRole object inside of the for or you can create a copy from that and add it to the array. I recommend the following:
for (role in [roleList childrenNamed:@"role"]){
Role *currentRole = [[Role alloc] init];
NSString *firstName =[role valueWithPath:@"firstName"];
NSString *lastName = [role valueWithPath:@"lastName"];
currentRole.name = [NSString stringWithFormat:@"%@ %@",firstName, lastName];
for (documentList2 in [role childrenNamed:@"documentList"])
{
SMXMLElement *document = [documentList2 childNamed:@"document"];
currentDoc.name = [document attributeNamed:@"name"];
[doclistArray2 addObject:currentDoc];
}
currentRole.documentList = doclistArray2;
[roleArray addObject:currentRole];
///I've logged currentRole.name here and it shows the right information
[currentRole release];
}//end of second for statemnt