はてなブックマークに追加

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
はてなブックマークに追加

iPhoneネットワークプログラミング その5




サイトを移行しました。
iPhoneアプリと、そのプログラム



第5回はiPhoneでXMLの解析をしてみたいと思います。

XMLの解析をするためには、XMLパーサが必要なのですが、
大きく分けて2種類のパーサが存在します。

それがDOM(Document Object Model)とSAX(Simple API for XML)です。
DOMでは、全てのXML情報を一度メモリに読み込み木構造に展開します。
それに対してSAXでは、シーケンシャルに情報を読み込んでいきます。
雰囲気的にはC言語でいうfgetsとgetcの違いみたいな感じです。

iPhoneではメモリの制約が厳しいため、DOMではメモリ不足が起こる可能性があります。
そこで、Cocoa標準のSAXパーサであるNSXMLParserクラスを使用します。

次に、RSSファイルのXMLの構造を見てみましょう。
itemタグで囲まれた部分が一つの記事に相当します。
ひとつの記事は、タイトル、概要、アドレス、更新日時などの情報から構成されています。

nsxmlparser1.jpg


ではNSXMLparserクラスを使って上のXMLを解析していきます。
View-Based ApplicationのViewControllerクラスにプログラムを追加していきます。

sampleViewController.h

@interface sampleViewController : UIViewController
{
NSXMLParser * xmlParser;
NSString * currentElement;
NSMutableString *currentTitle;
}
@end


sampleViewController.m

- (void)viewDidLoad {
[super viewDidLoad];

NSURL *xmlURL = [NSURL URLWithString:@"http://feeds.feedburner.com/TheAppleBlog"];
xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[xmlParser setDelegate:self];
[xmlParser parse];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict{
currentElement = [elementName copy];
if ([elementName isEqualToString:@"item"]) {
currentTitle = [[NSMutableString alloc] init];
}
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if ([currentElement isEqualToString:@"title"]) {
[currentTitle appendString:string];
}
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
NSLog(@"adding story: %@", currentTitle);
[currentTitle release];
}
}


viewDidLoadメソッドの中でNSXMLParserのインスタンスを作成し、
その初期化処理を行っています。具体的にはRSSのURL登録とデリゲートの設定です。
viewDidLoad以下の3つのメソッドがそのデリゲートメソッドになります。

まず一つめのデリゲートメソッドでitemタグの入りを見つけます。
itemタグが見つかればタイトルを格納するための文字列領域を確保します。

nsxmlparser2.jpg

2つ目のデリゲートメソッドで、実際のXMLファイルの解析をします。
今回のプログラムではタイトルの文字列を取得し、currentTitleに繋げていきます。
タイトルなどの文字列はサーバから一度に送られてくるわけではなく、分割されて送信されてくるので、
このように、iPhone側でappendStringを用いて再構成する必要があります。

nsxmlparser3.jpg

最後のデリゲートメソッドは解析終了時にコールされます。
今回のプログラムではここでタイトルを表示しています。

nsxmlparser4.jpg


実行してみて、実際にブラウザで見ることが出来るものと
タイトルが一致しているかどうか、確認してみてください。

スポンサーサイト

コメントの投稿

非公開コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます
開発アプリ

iDOF 色影 ラテアート ぱすてる

プロフィール

hokuson

Author:hokuson
京都在住。iPhoneアプリ「色影」や「iDOF」の開発者。アプリのレビューとかもしてみる。博士後期課程@R大学。ついに就職活動なるものをしなければいけないらしい。誰か雇ってください。笑。

カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
カテゴリ
最新コメント
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。