Objective-C中的复杂XML解析

Objective-C中的复杂XML解析,objective-c,ios,xml-parsing,Objective C,Ios,Xml Parsing,我必须在我的图书应用程序中阅读和显示多个字符的对话。我计划以以下格式将字符对话数据存储在XML中: 从前,在森德邦的丛林深处,住着一只懒惰而邪恶的豺狼。从前,在森德邦的丛林深处,住着一只懒惰而邪恶的豺狼。 这是音频文件位置。这是音频文件位置。这是音频文件位置。 这是第一角色的对话。这是第一角色的对话。 这是音频文件位置。这是音频文件位置。 这是第一角色对话2。这是第一角色对话2。 这是音频文件位置。这是音频文件位置。 这是第二角色对话1。这是第二角色对话1。 这是音频文件位置。这是音频文件位置

我必须在我的图书应用程序中阅读和显示多个字符的对话。我计划以以下格式将字符对话数据存储在XML中:


从前,在森德邦的丛林深处,住着一只懒惰而邪恶的豺狼。从前,在森德邦的丛林深处,住着一只懒惰而邪恶的豺狼。
这是音频文件位置。这是音频文件位置。这是音频文件位置。
这是第一角色的对话。这是第一角色的对话。
这是音频文件位置。这是音频文件位置。
这是第一角色对话2。这是第一角色对话2。
这是音频文件位置。这是音频文件位置。
这是第二角色对话1。这是第二角色对话1。
这是音频文件位置。这是音频文件位置。
从前,在森德邦的丛林深处,住着一只懒惰而邪恶的豺狼。从前,在森德邦的丛林深处,住着一只懒惰而邪恶的豺狼。
这是音频文件位置。这是音频文件位置。这是音频文件位置。
这是第一角色的对话。这是第一角色的对话。
这是音频文件位置。这是音频文件位置。
这是第二角色对话1。这是第二角色对话1。
这是音频文件位置。这是音频文件位置。
这是第二角色的对话。这是第二角色的对话。
这是音频文件位置。这是音频文件位置。
从XML结构中可以看到,将有多个页面,每个页面将有多个字符,每个字符将有多个对话。这个XML的大小可能在250KB左右(不确定这对于iPhone/iPad来说是否太大)。我计划使用GDATEXML解析此XML并存储为以下模型对象:

#import <Foundation/Foundation.h>

typedef enum {
    Left,
    Right
} DialoguePosition;

@interface Dialogue : NSObject{
    NSString *_id;
    int _frameX;
    int _frameY;
    int _frameWidth;
    int _frameHeight;
    DialoguePosition _dialoguePosition;
    NSString *_dialogueText;
    NSString *_dialogueAudioLocation;
}
@property (nonatomic, copy) NSString *id;
@property (nonatomic, assign) int frameX;
@property (nonatomic, assign) int frameY;
@property (nonatomic, assign) int frameWidth;
@property (nonatomic, assign) int frameHeight;
@property (nonatomic, assign) DialoguePosition dialoguePosition;
@property (nonatomic, copy) NSString *dialogueText;
@property (nonatomic, copy) NSString *dialogueAudioLocation;

- (id)initWithName:(NSString *)id frameX:(int)frameX frameY:(int)frameY frameWidth:(int)frameWidth frameHeight:(int)frameHeight dialoguePosition:(DialoguePosition)dialoguePosition dialogueText:(NSString *)dialogueText dialogueAudioLocation:(NSString *)dialogueAudioLocation;

@end
#导入
类型定义枚举{
左边
赖特
}对话位置;
@接口对话:NSObject{
NSString*\u id;
int_frameX;
国际框架;
整型帧宽;
内部框架高度;
DialoguePosition\u DialoguePosition;
NSString*_对话框文本;
NSString*_对话框音频位置;
}
@属性(非原子,副本)NSString*id;
@属性(非原子,赋值)int frameX;
@属性(非原子,赋值)int frameY;
@属性(非原子,赋值)int frameWidth;
@属性(非原子,赋值)int frameHeight;
@属性(非原子,赋值)对话框位置对话框位置;
@属性(非原子,复制)NSString*dialogueText;
@属性(非原子,复制)NSString*dialogueAudioLocation;
-(id)initWithName:(NSString*)id frameX:(int)frameX frameY:(int)frameY frameWidth:(int)frameWidth frameHeight:(int)frameHeight dialoguePosition:(dialoguePosition)dialoguePosition dialogueText:(NSString*)dialogueText dialogueAudioLocation:(NSString*)dialogueAudioLocation:(NSString*)dialogueAudioLocation;
@结束

我应该使用属性列表而不是XML还是XML应该可以?我需要通过传递页面ID和对话ID轻松快速地访问对话。为了实现这一点,我应该在NSDictionary中存储对话模型对象,还是应该采用其他更好的方法。如果您能就我应该采取的方法提出建议,我将不胜感激。

我个人会选择财产清单。与plist相比,单独处理所有xml内容是相当多的。250kb应该没问题。谢谢。属性列表是否支持这种复杂的结构和属性?例如:。如果我使用属性列表方法,如何通过传递页面ID和对话ID来访问对话?250k应该没有问题。在我看来,XML解析和使模型对象符合XML树会更好。通过这种方式,您可以轻松管理Objective-C对象。我认为性能是一样的,因为PLists下面是XMLs。我应该在NSDictionary中存储NSDictionary还是在NSDictionary中存储NSArray?我需要通过传递页面ID和对话ID轻松快速地访问对话。一些伪代码将不胜感激。