私は RESTKit の可能性を信じています。素晴らしいですね。
残念ながら、私が見つけることができたすべての例は、JSON の解析と、比較的「フラットな」JSON の解析を中心に展開しています。残念なことに、世の中には XML がたくさんあり、その多くは醜いものです。
特に、深くネストされた XML 構造を解析する良い例を見つけることができないようです。
私の失敗は主要なパスを理解することにあると思います。この質問への答えが、この問題に直面している他の人にとって標準的な例になることを願っています.
人為的な例で行きましょう。次の XML を検討してください。
<?xml version="1.0"?>
<old_lady fate="perhaps she'll die!">
<bird reason = "to catch the spider">
<spider reason="to catch the fly">
<fly reason="why oh why?" action="swallowed" name="Al"/>
<fly reason="why oh why?" action="swallowed" name="Bob"/>
<fly reason="why oh why?" action="swallowed" name="Cory"/>
<fly reason="why oh why?" action="swallowed" name="Dan"/>
<fly reason="why oh why?" action="swallowed" name="Edgar"/>
</spider>
</bird>
</old_lady>
ここから Fly オブジェクトのリストを取得したいとしましょう:
@interface Fly : NSObject
@property (retain) NSString *reason;
@property (retain) NSString *action;
@property (retain) NSString *name;
@end
だから私は次のようなことをするだろうと思っていました:
[RKObjectManager objectManagerWithBaseURL:[NSURL
URLWithString:@"http://some.server.com"]];
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Fly class]];
[mapping mapKeyPath:@"reason" toAttribute:@"reason"];
[mapping mapKeyPath:@"action" toAttribute:@"action"];
[mapping mapKeyPath:@"name" toAttribute:@"name"];
[RKObjectManager.sharedManager.mappingProvider setMapping:mapping
forKeyPath:@"//old_lady/bird/spider/fly"];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/path/to/rhyme.xml"
delegate:self];
しかし、これは私を得る:
Encountered errors during mapping: Could not find an object mapping for keyPath: ''
問題は私の「//old_lady/bird/spider/fly」キーパスにあると確信していますが、後でソリューションをモデル化するための同様の例が見つかりません。ハーフ?