2012-02-03 31 views
5

Tôi đang cố chuyển đổi một từ điển NSD thành XML. (Tôi đã thành công trong việc chuyển đổi NSDictionary thành JSON). Nhưng bây giờ tôi cần phải chuyển đổi NSDictionary thành XML. Có serializer tích hợp trong Objective-C như là một cho 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"]; 

... // đang không liên quan khác bỏ qua

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

Các NSLog không in một chuỗi định dạng XML. Nó in nó giống như một NSDictionary. Tôi nên sử dụng gì để sắp xếp thứ tự từ điển NSD sang XML?

+0

Bạn nên chuyển đổi bằng tay. – Nekto

+0

Tôi cho rằng có một cách dễ dàng hơn? vì mục tiêu-c có một bộ nối tiếp tích hợp sẵn cho JSON. – acecapades

Trả lời

2

propertyListFromData:... trả về "đối tượng danh sách thuộc tính", nghĩa là tùy thuộc vào nội dung của dữ liệu, mảng hoặc từ điển. Điều mà bạn thực sự quan tâm (xml) được trả lại bởi dataFromPropertyList:... và do đó được lưu trữ trong biến số theBodyData của bạn.

Hãy thử điều này:

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

Tôi làm cách nào để sử dụng NSLog để xác minh xem BodyData có thực sự ở định dạng XML không? Cảm ơn! – acecapades

+0

Tôi đã thêm một ví dụ. – omz

+0

Điều đó đã làm điều đó. Cảm ơn rất nhiều @omz! – acecapades

0

Có nhiều loại XML khác nhau. Nếu bạn không cầu kỳ về các thẻ cụ thể và nếu nội dung trong từ điển của bạn bị giới hạn đối với các loại được sử dụng trong danh sách thuộc tính (NSString, NSNumber, NSDate, v.v.), bạn có thể viết từ điển của mình vào danh sách thuộc tính trong một dòng:

[myDict writeToFile:somePath atomically:YES]; 

Nếu bạn muốn giữ XML trong bộ nhớ thay vì ghi vào một tệp, hãy sử dụng NSPropertyListSerialization như bạn đang làm.

+0

nhưng tôi dường như không thể chuyển đổi nó thành xml khi tôi sử dụng NSLog để in nó. Cú pháp của tôi cho NSPropertyListSerialization có đúng không? – acecapades