NSXMLParserクラス
継承 | NSObject |
準拠 | NSObject (NSObject) |
フレームワーク | /System/Library/Frameworks/Foundation.framework |
使用可能 | Mac OS X v10.3 以降 |
iOS 2.0 以降 | |
定義 | NSXMLParser.h |
解説
パーサーオブジェクトの初期化
パーサーオブジェクトを初期化するには3つ方法があります。それぞれallocで作成して、URLから初期化するメソッド(– initWithContentsOfURL)、データから初期化するメソッド(– initWithData)、インプットストリームから初期化するメソッド(– initWithStream)です。
デリゲートの管理
パーサーで何か発見したときはデリゲートの該当するメソッドが呼び出されます。デリゲートをセットするメソッドは(– setDelegate)で、取得するメソッドは(– delegate)です。
パーサーの挙動を管理する。
名前空間を処理するかどうかを取得するメソッドは(– shouldProcessNamespaces)で、セットするメソッドは(– setShouldProcessNamespaces)です。名前空間プリフィックスを処理する稼働かを取得するメソッドは(– shouldReportNamespacePrefixes)で、セットするメソッドは(– setShouldReportNamespacePrefixes)です。
外部エンティティの報告をするかどうかを取得するメソッドは(– shouldResolveExternalEntities)で、セットするメソッドは(– setShouldResolveExternalEntities)です。
パース
パース(解析)を開始するには(– parse)メソッドを使用します。途中でパースを停止するには(– abortParsing)メソッドを使用します。パーサーのエラーを取得するには(– parserError)メソッドを使用します。
パーサー状態の取得
レシーバが処理している行番号を得るには(– lineNumber)メソッドを使用します。列番号を得るには(– columnNumber)メソッドを使用します。外部エントリーのパブリック識別子を得るには(– publicID)メソッドを使用します。外部エントリーのシステム識別子を得るには(– systemID)メソッドを使用します。ともにエラー発生後に利用可能です。
iTunesトップアルバムのRSSからタイトルを取得する(NSXMLParserのサブクラスとしてITunesXMLParserというクラスを作っています。)
#pragma mark initWithContentsOfURL -(void)method002 { NSURL *aURL = [NSURL URLWithString:@"http://itunes.apple.com/jp/rss/topalbums/limit=10/explicit=true/xml"]; ITunesXMLParser *parser = [ [ ITunesXMLParser alloc ] initWithContentsOfURL:aURL]; BOOL result = NO; if ( parser ) { // [ parser setShouldProcessNamespaces:YES ]; [ parser setShouldReportNamespacePrefixes:YES ]; [ parser setShouldResolveExternalEntities:YES ]; ([parser shouldProcessNamespaces]) ? NSLog(@"shouldProcessNamespaces YES") : NSLog(@" NO") ; ([parser shouldReportNamespacePrefixes]) ? NSLog(@"shouldReportNamespacePrefixes YES") : NSLog(@" NO") ; ([parser shouldResolveExternalEntities]) ? NSLog(@"shouldResolveExternalEntities YES") : NSLog(@" NO") ; result = [ parser parse ]; if ( result == NO ) { NSError *theErr = [ parser parserError ]; if ( [ theErr code ] != 0 ) { NSLog(@"%@",[ theErr localizedDescription ] ); } } else { NSMutableString *str = [ NSMutableString string ]; NSArray *items = [ parser newsItems ]; int i = 0, cnt = [ items count ]; for ( i = 0; i < cnt; i++ ) { NSDictionary *itemDict = [ items objectAtIndex: i ]; id itemElem; itemElem = [ itemDict objectForKey: @"elementName" ]; if ( [ itemElem isEqual:@"title" ] ) { NSString *retString = [[ itemDict objectForKey: @"contents" ] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; [ str appendString: retString ]; [ str appendString: @"\r" ]; } } NSLog(@"----- %@",str); } } }