Apple предоставляет NSArchiver и NSUnachriver для сериализации/десериализации объектов, но это не может обрабатывать какую-либо собственную схему XML. Поэтому заполнение структуры объекта данными любой пользовательской xml-схемы должно выполняться вручную. Поскольку сообщество разработчиков iPhone быстро растет, многие программисты-новички отчаянно пытаются разобраться с доступными возможностями анализа XML.
iPhone SDK предоставляет только NSXmlParser для синтаксического анализа xml, который более полезен для чтения определенных частей XML файла, чем заполнение всей структуры объекта, что на самом деле является болью.
Другая возможность - это известная библиотека libxml, написанная на ANSI C - не простая в использовании для тех, кто начинает программирование с помощью objective-c и никогда не учился надлежащему C раньше. Событие, что доступно множество оберток, дело с xml может быть болью для новичков.
И вот моя идея имеет место. Библиотека XmlSerializer, которая автоматически заполняет структуру объекта, может сделать ее намного проще и повысить качество приложения для многих программистов. Моя идея должна работать следующим образом:
Файл xml
<Test name="Michael" uid="28">
<Adress street="AlphaBetaGammastrasse 1" city="Zürich" postCode="8000" />
<Hobbies>
<Hobby describtion="blabla"/>
<Hobby describtion="blupblup"/>
</Hobbies>
</Test>
Классы для заполнения
@interface Test : NSObject {
NSString *name;
Adress *adress;
NSArray *hobbies;
int uid;
}
@property (nonatomic, copy) NSString *name;
@property (nonatomic, retain) Adress *adress;
@property (nonatomic, retain) NSArray *hobbies;
@property (nonatomic, readwrite) int uid;
@end
@interface Adress : NSObject {
NSString *street;
NSString *city;
int postCode;
}
@property (nonatomic, copy) NSString *street;
@property (nonatomic, copy) NSString *city;
@property (nonatomic, readwrite) int postCode;
@end
Как должен работать сериализатор xml
NSError *error = nil;
XMLSerializer *serializer = [[XMLSerializer alloc] init];
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"TestFile" ofType:@"xml"]];
Test *test = [serializer deserializeWithData:data error:&error];
Для заполнения структуры объекта требуется только одна строка кода:
Test *test = [serializer deserializeWithData:data error:&error];
Это было бы так легко использовать, что любой программист-новичок мог его использовать. Для более расширенного использования сериализатор может быть настроен.
Как вы думаете, будет ли это полезной и популярной библиотекой для приложений iPhone и OSX?
Изменить: Вы можете увидеть проект здесь, но он не зависит от выпуска.