Tenía un error cuando afirmé que no se podían escribir tales elementos. Apple tiene dos analizadores XML, uno para NSDictionary/NSArray/NSString/NSNumber/etc. objetos y uno llamado NSXMLDocument.
He eliminado el código anterior, que era compatible con Mac OS X 10.3; el código que se menciona a continuación le permitirá tener archivos xml que contengan las etiquetas y los atributos que desee. En mi ejemplo, el código va a crear un archivo XML que tiene el siguiente aspecto:
< raíz > <contador/contador> </root >
Nota: Usted puede incluso quitar el 'contador 'y cambie el nombre' raíz 'por' contador ', si desea reducirlo aún más.
El nuevo código es compatible con Mac OS X 10.4 y posterior; está probado y funciona fuera de la caja:
- (void)incrementCounter
{
NSXMLDocument *xmlDoc;
NSError *error;
NSURL *url;
NSXMLElement *root;
id item;
NSData *data;
NSArray *children;
int counter;
NSString *pathname;
pathname = [@"~/myFile" stringByExpandingTildeInPath];
url = [NSURL fileURLWithPath:pathname];
xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:url options:NSXMLDocumentTidyXML error:&error];
if(xmlDoc)
{
root = [xmlDoc rootElement];
}
else
{
root = [NSXMLNode elementWithName:@"root"];
xmlDoc = [[NSXMLDocument alloc] initWithRootElement:root];
}
// fetch value:
children = [root nodesForXPath:@"counter" error:&error];
item = [children count] ? [children objectAtIndex:0] : NULL;
// modify value:
counter = item ? [[item stringValue] intValue] : 0;
counter++;
if(NULL == item)
{
item = [NSXMLNode elementWithName:@"counter" stringValue:@"0"];
[root insertChild:item atIndex:0];
}
[item setStringValue:[[NSNumber numberWithInt:counter] stringValue]];
// write:
data = [xmlDoc XMLData];
[data writeToURL:url atomically:YES];
}
posible duplicado de [Cocoa/Obj-C lector de archivos XML simple - necesita ayuda] (http://stackoverflow.com/questions/5274513/cocoa-obj-c-simple-xml-file-reader-need-help) –
Entre otros: [Extraer información de XML] (http://stackoverflow.com/questions/3739854/) | [Analizando XML] (http://stackoverflow.com/questions/1089737/parsing-xml-in-cocoa) | [Práctica recomendada para analizar XML] (http://stackoverflow.com/questions/2237757/) | [Leer/Escribir XML] (http://stackoverflow.com/questions/1072979/) –
Gracias, pero estoy buscando un ejemplo que muestre cómo leer, modificar __y__ escribir un árbol xml. Los 'duplicados' no hacen eso. Supongamos que tengo (entre otras cosas) un contador simple en un archivo xml: . ¿Cómo lo analizo, lo incremento y lo vuelvo a escribir en el archivo? – hanno