•                                              XML                     Jason               •   XML   element              ...
Window-Based Application                               TopSongs               UIViewController                RSSTableView...
#import <UIKit/UIKit.h>          @interface TopSongsAppDelegate : NSObject <UIApplicationDelegate> {          }          @...
XML                  title element           title element           entrytitle element                               flag ...
-(void) viewWillAppear:(BOOL)animated                       {                                         TableView           ...
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data          {              NSLog(@"called in ...
XML                                                                       element tag               -(void) parser:(NSXMLP...
TableView DataSource Method     - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  ...
xmlCheck = <?xml version="1.0" encoding="utf-8"?>               !   <feed xmlns:im="http://itunes.apple.com/rss" xmlns="ht...
<entry>!   !   !    !   <updated>2011-09-30T14:43:55-07:00</updated>!   !   !    !!   !   !    !   !   <id>http://itunes.a...
네트워크(웹서비스연결 Xml파싱) pdf
Upcoming SlideShare
Loading in...5
×

네트워크(웹서비스연결 Xml파싱) pdf

1,216

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,216
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "네트워크(웹서비스연결 Xml파싱) pdf"

  1. 1. • XML Jason • XML element • <element> </element> • IOS NSURL, NSURLRequest, URLConnection XML • XML NSXMLParser
  2. 2. Window-Based Application TopSongs UIViewController RSSTableViewController XIB
  3. 3. #import <UIKit/UIKit.h> @interface TopSongsAppDelegate : NSObject <UIApplicationDelegate> { } @property (nonatomic, retain) IBOutlet UIWindow *window; @end #import "TopSongsAppDelegate.h" #import "RSSTableViewController.h" @implementation TopSongsAppDelegate @synthesize window=_window; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. RSSTableViewController *tvc = [[[RSSTableViewController alloc] initWithStyle:UITableViewStylePlain] autorelease]; [self.window setRootViewController:tvc]; [self.window makeKeyAndVisible]; return YES; }
  4. 4. XML title element title element entrytitle element flag #import <UIKit/UIKit.h> @interface RSSTableViewController : UITableViewController <NSXMLParserDelegate> { BOOL waitingForEntryTitle; NSMutableString *titleString; NSMutableArray *songs; NSMutableData *xmlData; Song List NSURLConnection *connectionInProgress; } - (void) loadSongs; @end XML
  5. 5. -(void) viewWillAppear:(BOOL)animated { TableView [super viewWillAppear:animated]; NSLog(@"called in viewWillApear"); [self loadSongs]; } - (void) loadSongs { [songs removeAllObjects]; [[self tableView] reloadData]; NSURL *url = [NSURL URLWithString:@"http://ax.itunes.apple.com/" @"WebObjects/MZStoreServices.woa/ws/RSS/topsongs/" @"limit=10/xml"]; NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; if(!connectionInProgress) { [connectionInProgress cancel]; [connectionInProgress release]; [xmlData release]; xmlData = [[NSMutableData alloc] init]; NSLog(@"called in loadSongs"); connectionInProgress = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; } }
  6. 6. - (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSLog(@"called in didreceived"); [xmlData appendData:data]; } - (void) connectionDidFinishLoading:(NSURLConnection *)connection { NSString *xmlCheck = [[[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding] autorelease]; NSLog(@"xmlCheck = %@", xmlCheck); NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData]; [parser setDelegate:self]; [parser parse]; XMLParse XML XML [parser release]; [[self tableView] reloadData]; XML songs } - (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { [connectionInProgress release]; connectionInProgress = nil; [xmlData release]; xmlData = nil; NSString *errorString = [NSString stringWithFormat:@"Fetch failed: %@", [error localizedDescription]]; UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:errorString delegate:nil cancelButtonTitle:@"OK" destructiveButtonTitle:nil otherButtonTitles:nil]; [actionSheet showInView:[[self view] window]]; [actionSheet autorelease]; }
  7. 7. XML element tag -(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes: (NSDictionary *)attributeDict { if([elementName isEqual:@"entry"]) { NSLog(@"Found a song entry"); waitingForEntryTitle = YES; } if([elementName isEqual:@"title"] && waitingForEntryTitle) { NSLog(@"found title!"); titleString = [[NSMutableString alloc] init]; } } element tag(<title> string </title> - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { [titleString appendString:string]; } element tag(<title> string </title> -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if([elementName isEqual:@"title"] && waitingForEntryTitle) { NSLog(@"ended title:%@", titleString); [songs addObject:titleString]; [titleString release]; titleString = nil; } if([elementName isEqual:@"entry"]) { NSLog(@"ended a song entry"); waitingForEntryTitle = NO; } }
  8. 8. TableView DataSource Method - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [songs count]; } - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; if(cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"] autorelease]; } [[cell textLabel] setText:[songs objectAtIndex:[indexPath row]]]; return cell; }
  9. 9. xmlCheck = <?xml version="1.0" encoding="utf-8"?> ! <feed xmlns:im="http://itunes.apple.com/rss" xmlns="http://www.w3.org/2005/Atom" xml:lang="en"> ! ! <id>http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/ xml</id><title>iTunes Store: Top Songs</title><updated>2011-09-30T14:43:55-07:00</updated><link rel="alternate" type="text/html" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop? id=38&amp;popId=1"/><link rel="self" href="http://ax.itunes.apple.com/WebObjects/ MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml"/><icon>http://phobos.apple.com/favicon.ico</ icon><author><name>iTunes Store</name><uri>http://www.apple.com/itunes/</uri></ author><rights>Copyright 2008 Apple Inc.</rights>
  10. 10. <entry>! ! ! ! <updated>2011-09-30T14:43:55-07:00</updated>! ! ! !! ! ! ! ! <id>http://itunes.apple.com/us/album/someone-like-you/id420075073?i=420075185&amp;uo=2</id>! ! ! !! ! ! ! ! <title>Someone Like You - ADELE</title>! ! ! !! ! ! ! !! ! ! !! ! ! ! ! <im:name>Someone Like You</im:name>! ! ! !! ! ! ! ! <link rel="alternate" type="text/html" href="http://itunes.apple.com/us/album/someone-like-you/id420075073?i=420075185&amp;uo=2"/>! ! ! !! ! ! ! ! <im:contentType term="Music" label="Music"><im:contentType term="Track" label="Track"/></im:contentType>! ! ! !! ! ! ! ! <category term="Pop" scheme="http://itunes.apple.com/us/genre/music-pop/id14?uo=2" label="Pop"/>! ! ! !! ! ! ! ! <link title="Preview" rel="enclosure" type="audio/x-m4a" href="http://a1.mzstatic.com/us/r1000/051/Music/71/b2/95/mzi.rsrrzevf.aac.p.m4a" im:assetType="preview"><im:duration>30000</im:duration></link>! ! ! !! ! ! ! ! <im:artist href="http://itunes.apple.com/us/artist/adele/id262836961?uo=2">ADELE</im:artist>! ! ! !! ! ! ! ! <im:price amount="1.29000" currency="USD">$1.29</im:price>! ! ! !! ! ! ! ! <im:image height="55">http://a1.mzstatic.com/us/r1000/014/Music/ea/6f/96/mzi.egqrvlca.55x55-70.jpg</im:image>! ! ! !! ! ! ! ! <im:image height="60">http://a5.mzstatic.com/us/r1000/014/Music/ea/6f/96/mzi.egqrvlca.60x60-50.jpg</im:image>! ! ! !! ! ! ! ! <im:image height="170">http://a4.mzstatic.com/us/r1000/014/Music/ea/6f/96/mzi.egqrvlca.170x170-75.jpg</im:image>! ! ! !! ! ! ! ! <rights>2010 XL Recordings Ltd</rights>! ! ! !! ! ! ! ! <im:releaseDate label="February 22, 2011">2011-02-22T00:00:00-07:00</im:releaseDate>! ! ! !! ! ! ! ! <im:collection><im:name>21</im:name><link rel="alternate" type="text/html" href="http://itunes.apple.com/us/album/21/id420075073?uo=2"/><im:contentType term="Music" label="Music"><im:contentType term="Album" label="Album"/></im:contentType></im:collection>! ! ! !! ! ! !! ! ! ! ! <content type="html">&lt;table border=&quot;0&quot; width=&quot;100%&quot;&gt; &lt;tr&gt; &lt;td&gt; &lt;table border=&quot;0&quot; width=&quot;100%&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; &lt;tr valign=&quot;top&quot; align=&quot;left&quot;&gt; &lt;td align=&quot;center&quot; width=&quot;166&quot; valign=&quot;top&quot;&gt; &lt;a href=&quot;http://itunes.apple.com/us/album/someone-like-you/id420075073?i=420075185&amp;uo=2&quot;&gt;&lt;imgborder=&quot;0&quot; alt=&quot;Someone Like You artwork&quot; src=&quot;http://a4.mzstatic.com/us/r1000/014/Music/ea/6f/96/mzi.egqrvlca.170x170-75.jpg&quot; /&gt;&lt;/a&gt; &lt;/td&gt; &lt;td width=&quot;10&quot;&gt;&lt;img alt=&quot;&quot; width=&quot;10&quot; height=&quot;1&quot; src=&quot;http://r.mzstatic.com/images/spacer.gif&quot; /&gt;&lt;/td&gt; !&lt;td width=&quot;95%&quot;&gt; &lt;b&gt;&lt;a href=&quot;http://itunes.apple.com/us/album/someone-like-you/id420075073? i=420075185&amp;uo=2&quot;&gt;Someone Like You&lt;/a&gt;&lt;/b&gt;&lt;br/&gt;
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×