我一直在使用NSXMLParser
来解析xml并成功启动了应用程序...最近我遇到了xml的问题......因为xml很重。它增加了内存空间...我打算转向plist(因为它大大减少了内存开销)。并且不知道从哪里开始...我已经通过网络进行了搜索并且没有成功,你们可以给我一个示例代码,甚至是一个包含plist的工作网址...绰绰有余......我如果你们能帮助我,我将非常感激。
答案 0 :(得分:2)
如果您可以控制数据的格式,是否考虑过使用JSON?
答案 1 :(得分:1)
现代plists XML:Property Lists。可以使用和创建二进制plist,但它们只是二进制XML的一种形式。这可能反过来意味着开销的减少,但是以可读性为代价。 JSON可能小于等效的XML,但并非总是如此。
将所有这些放在一边,plists往往比同等的XML更加更多冗长。比较XML:
<book>
<author>James Joyce</author>
<title>Ulysses</title>
</book>
与等效的plist:
<dict>
<key>author</key>
<string>James Joyce</string>
<key>title</key>
<string>Ulysses</string>
</dict>
答案 2 :(得分:1)
您可以使用https://github.com/jayway/CWFoundation中的CWXMLTranslator
轻松地从XML转换为域对象。
假设您拥有此域类:
@interface Book : NSObject {
}
@property(copy) NSString* author;
@property(copy) NSString* title;
@end
这个XML:
<books>
<book>
<author>James Joyce</author>
<title>Ulysses</title>
</book>
<!-- MORE BOOKS HERE -->
</book>
您只需要定义翻译文件,将其命名为Book.xmltranslation
,然后添加:
book +> @root : Book {
author >> author;
title >> title;
}
然后,这将用于从服务器获取XML并将其转换为Book
类的实时实例,如下所示:
NSArray* books = [CWXMLTranslator translateContentsOfURL:url
withTranslationNamed:@"Book"
delegate:nil
error:NULL];
这是最简单的用例,如果你愿意,翻译DSL甚至可以内联写入。 CWXMLTranslator
也支持更复杂的操作,例如类型转换为日期,URL,数字等。以及嵌套类型,以及直接转换为Core Data托管对象。
CWFoundation项目包含您需要的所有文档,以及一个解析RSS源的示例项目。