2012-02-03 19 views
5

Próbuję przekonwertować NSDictionary na XML. (Udało mi się przekształcić NSDictionary w JSON). Ale teraz muszę przekształcić NSDictionary w XML. Czy w Objective-C istnieje wbudowany serializator, taki jak w JSON?NSDictionary do 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"]; 

... // inny kod znaczenia pominięte

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

The NSLog nie drukuje ciąg w formacie XML. Drukuje go jak NSDictionary. Co powinienem użyć do serializacji mojego NSDictionary do XML?

+0

należy przekonwertować ręcznie. – Nekto

+0

Przypuszczam, że jest łatwiejszy sposób? ponieważ obiekt-c ma wbudowany serializer dla JSON. – acecapades

Odpowiedz

2

propertyListFromData:... zwraca "obiekt listy właściwości", czyli zależnie od zawartości danych, tablicę lub słownik. Rzecz, którą faktycznie interesujesz (xml), jest zwracana przez dataFromPropertyList:..., a tym samym przechowywana w zmiennej theBodyData.

Spróbuj tego:

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

jak używać NSLog do sprawdzenia, czy daneBodyData jest rzeczywiście w formacie XML? Dzięki! – acecapades

+0

Dodałem przykład. – omz

+0

To załatwiło sprawę. Wielkie dzięki bardzo @omz! – acecapades

0

Istnieje wiele różnych odmian XML. Jeśli nie jesteś wybredny w odniesieniu do konkretnych tagów, a zawartość słownika jest ograniczona do typów używanych na listach właściwości (NSString, NSNumber, NSDate itp.), Możesz napisać słownik do listy właściwości w jednym wierszu:

[myDict writeToFile:somePath atomically:YES]; 

Jeśli wolisz, aby zachować w pamięci XML zamiast pisania do pliku, użyj NSPropertyListSerialization jak robisz.

+0

, ale nie mogę przekonwertować go do xml, gdy używam NSLog, aby go wydrukować. Czy moja składnia dla NSPropertyListSerialization jest poprawna? – acecapades