XMLパーサのサンプルを作成しました

Objective-Cで XMLファイルを解析し、タグ名/属性/要素をテキストビューに表示するサンプルを以下に作成しました。

サンプルでは、「game」というキーワードを基に XMLを解析しています。

サンプルダウンロード

XMLファイル

ソースコード

ViewController.h

1
2
3
4
5
6
7
8
9
10
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <NSXMLParserDelegate> {
  NSString *nowTagStr;
  NSString *txtBuffer;
}

@property (strong, nonatomic) UITextView *textView;

@end

ViewController.m

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad
{
  [super viewDidLoad];
  //テキストビューの初期化
  [self initTextView];
  //URLを指定してXMLパーサーを作る
  [self setXMLParser];
}

//テキストビューの初期化
- (void)initTextView
{
  //
  self.textView = [[UITextView alloc] initWithFrame:CGRectMake(30, 30, 260, 508)];
  //テキストビューを空欄にする
  self.textView.text = @"";
  //テキストビューを編集不可に設定
  self.textView.editable = NO;
  //テキストビューを画面に追加
  [self.view addSubview:self.textView];
}

//URLを指定してXMLパーサーを作る
- (void)setXMLParser
{
  //XMLを読み込む
  NSURL *myURL = [NSURL URLWithString:@"https://dolice.net/sample/ios/XMLParser/sample.xml"];
  //XMLパーサを初期化
  NSXMLParser *myParser = [[NSXMLParser alloc] initWithContentsOfURL:myURL];
  //デリゲート指定
  myParser.delegate = self;
  // 解析を開始する
  [myParser parse];
}

//解析開始時の処理
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
  //解析中タグの初期化
  nowTagStr = @"";
}

//テキストビューに、タグ名と、price属性を追加する
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI
 qualifiedName:(NSString *)qName
    attributes:(NSDictionary *)attributeDict
{
  //開始タグが「game」だったら
  if ([elementName isEqualToString:@"game"]) {
      //解析中タグに設定
      nowTagStr = [NSString stringWithString:elementName];
      //テキストバッファの初期化
      txtBuffer = @"";
      //テキストビューに、タグ名と、price属性を追加する
      self.textView.text = [self.textView.text stringByAppendingFormat:
                          @"タグ名=[%@]\n 属性 price=[%@]",
                          elementName, [attributeDict objectForKey:@"price"]];
  }
}

//テキストバッファに文字を追加する
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
  //解析中のタグが「game」だったら
  if ([nowTagStr isEqualToString:@"game"]) {
      //テキストバッファに文字を追加する
      txtBuffer = [txtBuffer stringByAppendingString:string];
  }
}

//テキストビューにテキストバッファの文字を追加する
- (void)parser:(NSXMLParser *)parser
 didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI
 qualifiedName:(NSString *)qName
{
  //終了タグが「game」だったら
  if ([elementName isEqualToString:@"game"]) {
      //テキストビューにテキストバッファの文字を追加する
      self.textView.text = [self.textView.text stringByAppendingFormat:
                          @"\n 要素=[%@]\n\n", txtBuffer];
  }
}

@end

関連記事

お薦めの参考書

絶対に挫折しない iPhoneアプリ開発「超」入門 増補改訂第4版
Swiftについて知りたい開発者の方のみならず、プログラミング未経験者の方にも参考になる内容になっています。Swiftの基礎を一から丁寧に解説されており、この書籍があればネットで調べる手間をかなり省くことができると思います。

   このエントリーをはてなブックマークに追加

About

Masaki Hirokawa (@dolice_apps)

デザインエンジニア 廣川政樹の開発ブログ。Objective-Cや Javaなど iPhone/Androidアプリ開発に関する技術情報を掲載しています。

iPhone apps

  • リラックス・ヒーリング(無料)
  • 望みが叶う!引き寄せの法則アプリ(無料)
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー(無料)
  • アート壁紙HD(無料)
  • 綺麗な壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)
  • クールな壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)

Android apps

  • 浮世絵壁紙 - 美しい日本画ギャラリー
  • 綺麗な高画質壁紙

Objective-C Classes

Tag Cloud

ActionScript(9) ActionScript3(7) Ad(4) Adfurikun(2) AdMob(9) Android(10) Animation(17) AppDelegate(3) ARC(1) ArrayList(1) AVAudioPlayer(4) AVAudioSession(1) AVFoundation(3) Banner(2) Bitmap(1) Camera(4) CGAffineTransform(4) CGBlendMode(2) CGContextRef(1) CGImageRef(1) Classes(44) CLLocationManager(1) ConnectivityManager(1) ContentResolver(1) CoreLocation(2) Delegate(3) Device(7) Display(1) DisplayMetrics(1) Download(101) Facebook(6) Foundation(72) Framework(2) Google Analytics(1) Handler(1) iAd(6) ImageView(1) In-AppPurchase(1) iOS(12) iOS 7(15) iOS 7.1(3) iOS 8(1) iPad(7) iPhone(21) iPhone 6(4) Java(7) JavaScript(2) LINE(4) Localize(1) Magazine(1) MediaStore(1) MFComposeViewController(1) Nend(1) NetworkInfo(1) NSArray(23) NSCalendar(3) NSData(2) NSDate(7) NSDateComponents(2) NSDateFormatter(2) NSDictionary(12) NSEnumerator(1) NSIndexSet(1) NSInteger(6) NSMutableArray(17) NSMutableDictionary(5) NSMutableOrderedSet(7) NSMutableString(4) NSMutableURLRequest(1) NSNotificationCenter(1) NSNumber(1) NSObject(1) NSOrderedSet(7) NSRange(2) NSSelectorFromString(1) NSSet(6) NSString(19) NSTimer(4) NSTimeZone(1) NSURL(7) NSURLConnection(1) NSURLRequest(2) NSUserDefaults(7) NSXMLParser(2) Objective-C(222) PHP(1) Products(14) QuartzCore(3) RSS(2) Runnable(1) Sample(51) Screensaver(9) SDK(2) ShareCompat(1) Social(10) StoreKit(1) Twitter(6) UIAccelerometer(3) UIActionSheet(1) UIActivityIndicator(1) UIActivityIndicatorView(3) UIActivityViewController(1) UIAlertView(5) UIApplication(7) UIButton(4) UIColor(3) UIDatePicker(5) UIDevice(6) UIDeviceOrientation(1) UIEvent(6) UIImage(15) UIImagePickerController(4) UIImageView(12) UIKit(58) UILabel(7) UINavigationBar(4) UINavigationItem(1) UIPasteboard(4) UIScreen(1) UIScrollBar(1) UIScrollView(1) UISlider(3) UIStoryboardSegue(3) UISwitch(1) UITabBar(3) UITableView(4) UITextField(2) UIView(11) UIViewAnimationTransition(1) UIViewController(4) UIWebView(5) WindowManager(1) Xcode(48) Xcode 5(8) Xcode 5.1(2)