2012-02-03 15 views
5

Estoy tratando de convertir un NSDictionary a XML. (Tuve éxito en la transformación de NSDictionary a JSON). Pero ahora necesito transformar NSDictionary en XML. ¿Hay un serializador incorporado en Objective-C como el de JSON?NSDictionary a XML

int r = arc4random() % 999999999; 

//simulate my NSDictionary (to be turned into xml) 
NSString *name = [NSString stringWithFormat:@"Posted using iPhone_%d", r]; 
NSString *stock_no = [NSString stringWithFormat:@"2342_%d", r]; 
NSString *retail_price = @"12345"; 

NSArray *keys = [NSArray arrayWithObjects:@"name", @"stock_no", @"retail_price", nil]; 
NSArray *objects = [NSArray arrayWithObjects:name,stock_no,retail_price, nil]; 
NSDictionary *theRequestDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

NSDictionary *theFinalRequestDictionary = [NSDictionary dictionaryWithObject:theRequestDictionary forKey:@"product"]; 

... // otro código irrelevantes omitidas

NSData *theBodyData = [NSPropertyListSerialization dataFromPropertyList:theFinalRequestDictionary format:NSPropertyListXMLFormat_v1_0 errorDescription:nil]; 
NSPropertyListFormat format; 

id XMLed = [NSPropertyListSerialization propertyListFromData:theBodyData 
              mutabilityOption:NSPropertyListImmutable 
                 format:&format 
              errorDescription:nil]; 

NSLog(@"the XMLed is this: %@", [NSString stringWithFormat:@"%@", XMLed]); 

El NSLog no imprime una cadena en formato XML. Lo imprime como un NSDictionary. ¿Qué debo usar para serializar mi NSDictionary en XML?

+0

Debe convertir manualmente. – Nekto

+0

Supongo que hay una manera más fácil? porque objective-c tiene un serializador incorporado para JSON. – acecapades

Respuesta

2

propertyListFromData:... devuelve un "objeto de lista de propiedades", es decir, según el contenido de los datos, una matriz o un diccionario. Lo que realmente te interesa (el xml) lo devuelve dataFromPropertyList:... y, por lo tanto, se almacena en tu variable theBodyData.

Prueba esto:

NSLog(@"XML: %@", [[[NSString alloc] initWithData:theBodyData encoding:NSUTF8StringEncoding] autorelease]); 
+0

cómo utilizar NSLog para verificar si theBodyData está realmente en formato XML? ¡Gracias! – acecapades

+0

He agregado un ejemplo. – omz

+0

Eso hizo el truco. Muchas gracias mucho @omz! – acecapades

0

Hay muchas variedades diferentes de XML. Si no es exigente con las etiquetas específicas, y si el contenido de su diccionario está limitado a los tipos utilizados en las listas de propiedades (NSString, NSNumber, NSDate, etc.), puede escribir su diccionario en una lista de propiedades en una sola línea:

[myDict writeToFile:somePath atomically:YES]; 

Si prefiere mantener el XML en memoria en lugar de escribir en un archivo, use NSPropertyListSerialization como lo hace.

+0

pero parece que no puedo convertirlo a xml cuando uso NSLog para imprimirlo. ¿Es correcta mi sintaxis para NSPropertyListSerialization? – acecapades