2012-04-25 13 views
6

Czy istnieje sposób, w jaki mogę poprawnie sformatować plik XML podczas tworzenia go programowo?Kakao - jak sformatować plik XML

Na przykład, jeśli mogę użyć tego kodu, aby utworzyć prosty XML File:

NSXMLElement *fallback_driver = [[NSXMLElement alloc] initWithName:@"fallback-driver"]; 

NSXMLElement *folder = [[NSXMLElement alloc] initWithName:@"folder"]; 
[folder setStringValue:[ads_make objectValueOfSelectedItem]]; 
NSXMLElement *filename =[[NSXMLElement alloc] initWithName:@"filename"]; 
[filename setStringValue:ads_driver_name_selected]; 

[fallback_driver addChild:folder]; 
[fallback_driver addChild:filename]; 

NSXMLElement* rootNode = [ads_user_printxml rootElement]; 
[rootNode addChild:fallback_driver]; 

Gdy ta jest prowadzona, chciałbym wyjście będzie jak za komentowanym sekcji w obrazek poniżej, a nie rzeczywisty XML (który nie jest komentowany).

xml code

Jak mogę sformatować plik XML w ten sposób? Dzięki!

P.S.

Dzięki za odpowiedź .. Jednak chciałbym, aby przekształcić NSXMLDocument że mam do NSData do zapisywania ...

Staram

NSData *newData = [[ads_user_printxml XMLDataWithOptions:NSXMLNodePrettyPrint]XMLData]; 

jednak ja dostaję ostrzeżenie, że "NSData" może nie odpowiadać na "-XMLData", gdzie przed dodaniem XMLDataWithOptions działało poprawnie.Próbowałem również metodę "XMLStringWithOptions" (jak podano - ale uznał, że dane były bardziej odpowiednie), ale samo ostrzeżenie został wygenerowany

Dowolny deas? Wielkie dzięki!

Odpowiedz

11

Można wyjście ładnie sformatowany ciąg XML przy użyciu następujących:

NSString* string = [xmlNode XMLStringWithOptions:NSXMLNodePrettyPrint]; 

Zauważ, że NSXMLDocument i NSXMLElement są podklasy NSXMLNode, można to zrobić z tych klas również.

Jeśli chcesz NSData zamiast napisu, po prostu zrobić:

NSData* xmlData = [xmlNode XMLDataWithOptions:NSXMLNodePrettyPrint]; 
+0

Dzięki za odpowiedź .. Ja zmodyfikowane oryginalne pytanie trochę .. Jeśli byłbyś tak uprzejmy podać mi dalszą wskazówkę, w jaki sposób mogę faktycznie zapisać w NSData, byłbym bardzo wdzięczny. Powinienem był o tym wspomnieć w pierwotnym pytaniu. Dzięki. – Kevin

+2

Zaktualizowałem swoją odpowiedź. Twoja poprawka do pytania jest poprawna, z tą różnicą, że wywołujesz "XMLData" na wyniku. To nie zadziała i nie będzie konieczne, ponieważ wynikiem działania 'XMLDataWithOptions:' jest obiekt 'NSData', a nie obiekt' NSXMLNode'. –

+0

Działa świetnie, bardzo dziękuję Rob! – Kevin