I love iPhone, Android, Cocos2d-x
[iPhone] XML を NSXMLParser を使用して解析する
iPhone では NSXMLDocument がシュミレータでは動作するが実機では動作しないそうなので、NSXMLParser を使用して解析してみました。
解析したのは下記のような XML です。
<?xml version="1.0" encoding="UTF-8"?> <users> <user name="hoge" age="20" /> <user name="fuga" age="30" /> </users>
実際に解析するコード
static NSString *feedURLString = @"http://www.syuhari.jp/test/test.xml"; - (void)parserDidStartDocument:(NSXMLParser *)parser { // 解析開始時に実行する処理 } - (void)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error { NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL]; [parser setDelegate:self]; [parser setShouldProcessNamespaces:NO]; [parser setShouldReportNamespacePrefixes:NO]; [parser setShouldResolveExternalEntities:NO]; [parser parse]; NSError *parseError = [parser parserError]; if (parseError && error) { *error = parseError; } [parser release]; } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { // エレメント開始ハンドラ if (qName) { elementName = qName; } if ([elementName isEqualToString:@"user"]) { // 属性値を出力 NSLog(@"Name is %@ , Age is %@", [attributeDict objectForKey:@"name"], [attributeDict objectForKey:@"age"]); } } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { // エレメント終了ハンドラ if (qName) { elementName = qName; } } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { // エレメントの文字データを string で取得 } NSError *parseError = nil; [self parseXMLFileAtURL:[NSURL URLWithString:feedURLString] parseError:&parseError];
実際に使用する際は解析する処理(最後の2行以外)をクラスにして、最後の2行をそのクラスに対して実行するのがいいかと思います。
関連する投稿
One comment
コメントをどうぞ
Additional comments powered by BackType
2portable…
…