适用于iPhone应用程序的Xml序列化库

Eny*_*yra 11 xml iphone serialization objective-c

Apple为对象序列化/反序列化提供了NSArchiver和NSUnachriver,但是这不能处理任何自定义xml架构.因此,必须手动填充具有任何自定义xml架构的数据的对象结构.由于iPhone开发者社区正在快速增长,许多新手程序员都在绝望地处理可用的xml解析可能性.

iPhone SDK仅为xml解析提供NSXmlParser,这对于读取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>
Run Code Online (Sandbox Code Playgroud)

要填写的课程

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

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

要填充对象结构,只需要一行代码:

Test *test = [serializer deserializeWithData:data error:&error];
Run Code Online (Sandbox Code Playgroud)

这很容易使用,任何新手程序员都可以使用它.对于更高级的用法,可以配置串行器.

您怎么看?这对iPhone和OSX应用程序来说是一个有用且受欢迎的库吗?

编辑:您可以在这里看到该项目,但它远离发布.

Pey*_*loW 1

这是一个非常好的主意,就实现而言,我将通过将 NSXMLArchiver 和 NSXMLUnarchiver 实现为 NSCoder 的子类来实现。这样,任何符合 NSCoding 协议的类都可以轻松地与 XML 进行序列化。

序列化为 XML 时,性能受到的一个影响是将原始值作为属性,因为您无法保证对象请求数据进行编码的顺序。因此,如果属性是您想要的,那么它在内存缓冲区中将非常巨大。但这将是一个有趣的练习。

至于受欢迎程度如何?我认为不太受欢迎。用例太小了。

  • 设备到设备 - 只需使用 NSKeyedArchiver 就更容易,而且更紧凑。
  • 设备到新服务器 - 新服务器也必须实现相同的方案,序列化为 Java、C# 或其他内容。
  • 设备到现有服务器 - XML 格式已经固定,并且很可能与此不接近。