Cocoa - How To Format An XML File
Asked Answered
S

1

6

Is there a way that I can format an XML file in the proper way when creating it programmatically?

For example, if I use this code to create a simple 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];

When this is run, I would like to output to be as per the commented section in the image below, not the actual XML (that is not commented).

xml code

How I can format the XML file that way? Thanks!

P.S.

Thanks for the answer.. However, I would like to convert the NSXMLDocument that I have into NSData for saving...

I am trying

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

however I am getting a warning that "'NSData' may not respond to '-XMLData', where before I added the XMLDataWithOptions it was working fine. I also tried the method 'XMLStringWithOptions' (as you stated - but figured that data was more appropriate), but the same warning was generated.

Any ideas? Thanks a lot!

Sandler answered 25/4, 2012 at 5:8 Comment(0)
C
11

You can output a nicely formatted XML string using the following:

NSString* string = [xmlNode XMLStringWithOptions:NSXMLNodePrettyPrint];

Note that because NSXMLDocument and NSXMLElement are subclasses of NSXMLNode, you can do this with those classes also.

If you want NSData instead of a string, just do:

NSData* xmlData = [xmlNode XMLDataWithOptions:NSXMLNodePrettyPrint];
Chaps answered 25/4, 2012 at 7:3 Comment(2)
Thanks for the answer.. I have modified the original question a little bit.. If you would be so kind as to give me a further hint on how I can actually save to NSData, I would appreciate greatly. I should have mentioned that in the original question. Thanks.Sandler
I've updated my answer. Your edit to your question is correct except that you're calling XMLData on the result. That won't work and is unnecessary, because the output of XMLDataWithOptions: is an NSData object already, not an NSXMLNode object.Chaps

© 2022 - 2024 — McMap. All rights reserved.