2012-02-03 10 views
5

Sto provando a convertire un NSDictionary in XML. (Ho avuto successo nel trasformare NSDictionary in JSON). Ma ora ho bisogno di trasformare NSDictionary in XML. C'è un serializzatore integrato in Objective-C come quello per JSON?NSDictionary to 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"]; 

... // altro codice irrilevante omesso

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]); 

Il NSLog non stampa una stringa in formato XML. Lo stampa come un NSDictionary. Che cosa dovrei usare per serializzare il mio NSDictionary in XML?

+0

Si dovrebbe convertire manualmente. – Nekto

+0

Suppongo che ci sia un modo più semplice? perché ogg-c ha un serializzatore integrato per JSON. – acecapades

risposta

2

propertyListFromData:... restituisce un "oggetto elenco proprietà", ovvero, in base al contenuto dei dati, un array o un dizionario. La cosa a cui sei realmente interessato (l'xml) viene restituita da dataFromPropertyList:... e quindi archiviata nella tua variabile theBodyData.

Prova questo:

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

come utilizzare NSLog per verificare se il BodyData è effettivamente in formato XML? Grazie! – acecapades

+0

Ho aggiunto un esempio. – omz

+0

Questo ha fatto il trucco. Grazie mille @omz! – acecapades

0

Ci sono molte diverse varietà di XML. Se non sei schizzinoso riguardo ai tag specifici e se il contenuto del tuo dizionario è limitato ai tipi utilizzati negli elenchi di proprietà (NSString, NSNumber, NSDate, ecc.) Puoi scrivere il tuo dizionario in un elenco di proprietà in una riga:

[myDict writeToFile:somePath atomically:YES]; 

Se si preferisce mantenere l'XML in memoria anziché scrivere su un file, utilizzare NSPropertyListSerialization come si sta facendo.

+0

ma non riesco a convertirlo in xml quando uso NSLog per stamparlo. La mia sintassi per NSPropertyListSerialization è corretta? – acecapades