Я ошибался, когда утверждал, что написание таких элементов невозможно.
У Apple есть два парсера XML, один для NSDictionary / NSArray / NSString / NSNumber / и т. Д. объекты и один называется NSXMLDocument.
Я удалил предыдущий код, который был совместим с Mac OS X 10.3; код, упомянутый ниже, позволит вам иметь xml-файлы, содержащие любые теги и атрибуты, которые вам нравятся.
В моем примере код создаст файл XML, который выглядит следующим образом:
1
Примечание. Вы можете даже удалить «counter» и переименовать «root» в «counter», если хотите уменьшить его еще больше.
Новый код совместим с Mac OS X 10.4 и выше; он протестирован и работает "из коробки":
- (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];
}