Cocoa - 如何格式化XML文件

Kev*_*vin 6 cocoa objective-c nsxml

有没有办法在编程时以正确的方式格式化XML文件?

例如,如果我使用此代码创建一个简单的XML文件:

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];
Run Code Online (Sandbox Code Playgroud)

当这个运行时,我想按照下图中的注释部分输出,而不是实际的XML(没有注释).

xml代码

我如何以这种方式格式化XML文件?谢谢!

PS

谢谢你的答案.但是,我想将我拥有的NSXMLDocument转换为NSData以便保存...

我在尝试

NSData *newData = [[ads_user_printxml XMLDataWithOptions:NSXMLNodePrettyPrint]XMLData];
Run Code Online (Sandbox Code Playgroud)

但是我收到一条警告,"'NSData'可能无法响应'-XMLData',在我添加XMLDataWithOptions之前,它工作得很好.我也尝试了'XMLStringWithOptions'方法(如你所说 - 但是认为数据更多适当的),但产生了相同的警告.

有任何想法吗?非常感谢!

Rob*_*ger 11

您可以使用以下命令输出格式良好的XML字符串:

NSString* string = [xmlNode XMLStringWithOptions:NSXMLNodePrettyPrint];
Run Code Online (Sandbox Code Playgroud)

需要注意的是,因为NSXMLDocumentNSXMLElement是的子类NSXMLNode,你可以用这些类也做到这一点.

如果你想要NSData而不是一个字符串,只需:

NSData* xmlData = [xmlNode XMLDataWithOptions:NSXMLNodePrettyPrint];
Run Code Online (Sandbox Code Playgroud)

  • 我已经更新了我的答案.您对问题的编辑是正确的,除非您在结果上调用`XMLData`.这是行不通的,也是不必要的,因为`XMLDataWithOptions:`的输出已经是一个`NSData`对象,而不是一个`NSXMLNode`对象. (2认同)