2012-04-25 22 views
6

¿Existe alguna manera de formatear un archivo XML de la forma adecuada al crearlo mediante programación?Cacao - Cómo formatear un archivo XML

Por ejemplo, si utilizo este código para crear un simple archivo 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]; 

Cuando esto se ejecuta, me gustaría salida sea conforme a la sección comentada en la imagen de abajo, no el XML real (que no se comenta).

xml code

¿Cómo puedo formatear el archivo XML de esa manera? ¡Gracias!

P.S.

Gracias por la respuesta .. Sin embargo, me gustaría convertir el NSXMLDocument que tengo en NSData para guardar ...

Estoy tratando

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

sin embargo yo estoy haciendo una advertencia de que "'NSData' puede no responder a '-XMLData', donde antes de agregar XMLDataWithOptions funcionaba bien. También probé el método 'XMLStringWithOptions' (como dijiste, pero pensé que los datos eran más apropiados), pero la misma advertencia fue generado.

Cualquiera i deas? ¡Muchas gracias!

Respuesta

11

puede generar una cadena XML con un formato agradable utilizando la siguiente:

NSString* string = [xmlNode XMLStringWithOptions:NSXMLNodePrettyPrint]; 

Tenga en cuenta que debido a NSXMLDocument y NSXMLElement son subclases de NSXMLNode, se puede hacer esto con esas clases también.

Si desea NSData lugar de una cadena, simplemente:

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

Gracias por la respuesta .. He modificado la pregunta original un poco .. Si fuera tan amable de darme una más pistas sobre cómo puedo guardar realmente en NSData, lo agradecería enormemente. Debería haber mencionado eso en la pregunta original. Gracias. – Kevin

+2

He actualizado mi respuesta. La edición de su pregunta es correcta, excepto que está llamando 'XMLData' al resultado. Eso no funcionará y es innecesario, porque el resultado de 'XMLDataWithOptions:' ya es un objeto 'NSData', no un objeto' NSXMLNode'. –

+0

Funciona muy bien, muchas gracias Rob! – Kevin