XMLのパースしなきゃいけなくて、libxmlで処理するのめんどくさいなー。ということで、CocoaPodを探った結果、RaptureXMLを試してみることにしました。

URLから直接XMLを取得するイニシャライザがついていて、とても簡単に利用することができました。

CocoaPodsを使わない場合は libz と libxml2 をリンクしてやるようにして、RXMLElement.hとRXMLElement.mをプロジェクトに追加するだけで使えます。

だいたい以下のように利用してます。

NSURL* url = [NSURL URLWithString:@"http://eiel.info/hoge.xml"];
RXMLElement* root = [RXMLElement elementFromURL:url];
NSMutableArray* schedule = [NSMutableArray array];
[root iterate:@"item" usingBlock: ^(RXMLElement *item) {
    [schedule addObject:[[ALScheduleItem alloc] initWithRXMLElement:item]];
}];
i_schedule = [NSArray arrayWithArray:schedule];

RXMLElementオブジェクトを配列に格納しておいて利用しようとしたら、失敗したのでモデルオブジェクトを用意してやりました。

値を取り出すには

[element child:@"day"].text;

とやって取り出せます。DOMのインターフェイスになってますね。XPathも利用できるようです。 ソースコードも500行程度でコンパクトでした。