今回はChimeraXMLで以下のようなXMLを解析する方法を説明します。
[image-name]要素については、前回のチュートリアルで解説したように、単純に対応するプロパティを定義し、
[propertyInfoForElement:]メソッドで、そのプロパティ名を返すようにしておけばよいです。
[size]要素下の[width]と[height]については、同じ方法ではうまくいきません。
[width]と[height]の親要素として、[size]要素が存在しているため、
imageエンティティには、[size]要素に対応するプロパティを定義する必要があります。
[size]要素に対応するプロパティには、CPXmlEntityクラスを継承する別のクラスを作成し、それを型として指定します。
まず、先にサイズ要素に対応するSizeEntityクラスを定義します。
[SizeEntity.h]
[SizeEntity.m]
そして、先に定義したSizeEntityを使用するImageEntityを定義します。
[ImageEntity.h]
[ImageEntity.m]
パース処理をする部分は特別な対応は必要はありません。
<image> <image-name>sun.jpg</image-name> <size> <width>250</width> <height>300</height> </size> </image>
[image-name]要素については、前回のチュートリアルで解説したように、単純に対応するプロパティを定義し、
[propertyInfoForElement:]メソッドで、そのプロパティ名を返すようにしておけばよいです。
[size]要素下の[width]と[height]については、同じ方法ではうまくいきません。
[width]と[height]の親要素として、[size]要素が存在しているため、
imageエンティティには、[size]要素に対応するプロパティを定義する必要があります。
[size]要素に対応するプロパティには、CPXmlEntityクラスを継承する別のクラスを作成し、それを型として指定します。
まず、先にサイズ要素に対応するSizeEntityクラスを定義します。
[SizeEntity.h]
#import "CPXmlEntity.h" @interface SizeEntity : CPXmlEntity @property(strong,nonatomic) NSNumber *width; @property(strong,nonatomic) NSNumber *height; @end
[SizeEntity.m]
#import "SizeEntity.h" @implementation SizeEntity + (id)propertyInfoForElement:(NSString *)element { static NSDictionary *propDic; if(!propDic){ propDic = @{ @"width": @"width", @"height": @"height" }; } return propDic[element]; } @end
そして、先に定義したSizeEntityを使用するImageEntityを定義します。
[ImageEntity.h]
#import "CPXmlEntity.h" #import "SizeEntity.h" @interface ImageEntity : CPXmlEntity @property(strong,nonatomic) NSString *imageName; @property(strong,nonatomic) SizeEntity *size; @end
[ImageEntity.m]
#import "ImageEntity.h" @implementation ImageEntity + (id)propertyInfoForElement:(NSString *)element { static NSDictionary *propDic; if(!propDic){ propDic = @{ @"image-name": @"imageName", @"size": @"size" }; } return propDic[element]; } @end
パース処理をする部分は特別な対応は必要はありません。
NSData *data = [xmlText dataUsingEncoding:NSUTF8StringEncoding]; ChimeraParser *chimeraParser = [[ChimeraParser alloc] initWithTargetClass:[ImageEntity class]]; ImageEntity *image = [chimeraParser parse:data]; NSLog(@"imageName = %@",image.imageName); NSLog(@"width = %@",image.size.width); NSLog(@"height = %@",image.size.height);
ChimeraXMLチュートリアル(1) シンプルなXMLを解析する
ChimeraXMLチュートリアル(2) エンティティ型のプロパティを定義する
ChimeraXML_チュートリアル(3) 配列型の要素を解析する
ChimeraXMLチュートリアル(2) エンティティ型のプロパティを定義する
ChimeraXML_チュートリアル(3) 配列型の要素を解析する
コメント
コメントの投稿
トラックバック
http://csfun.blog49.fc2.com/tb.php/128-c633e1a7