loading...
Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
   
 

Registered : 102,428




HOME > Mobile > [iOS/iPhone] Tutorials - สอนเขียน iPhone App ฟรี เขียน iPad App เรียน iPhone เขียนโปรแกรม iPhone > iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

 
 


Bookmark.   
Share
       
iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C) แม้ว่าในปีจจุบันจะมีการใช้ JSON มาแทนที่ XML ในหลาย ๆ Interface ของโปรแกรม เช่น การส่งค่าระหว่าง Web Server กับ Client วิธีการในปัจจุบันก็จะถูกแทนที่ด้วย JSON ซะส่วนมาก แต่ XML ก็ยังถูกในบาง Interface เช่นการ Feed ข้อมูลจาก Server ซึ่งยังใช้ XML Feed เช่นเดิม หรือในบาง Application ก็จะยังใช้ XML เป็นมาตรฐานในการแลกเปลี่ยนข้อมูล และสำหรับ iOS ก็จะมี Class ไว้สำหรับ XML เช่นเดียวกัน โดยจะชื่อว่า NSXMLParser ที่จะช่วยในการ แยกและแตกข้อความจาก XML ให้อยู่ในรูปแบบที่จะสามารถแปลงเป็นข้อมูลแบบ Array ที่จะนำไปใช้กับส่วนอื่น ๆ ของโปรแกรมได้

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)


ในบทความนี้จะได้เรียนรู้ทั้งฝั่ง Server ที่จะใช้ PHP กับ MySQL ในการแปลงข้อมูลให้อยู่ในรูปแบบของ XML ซึ่งจะทำหน้าที่ส่ง Request ไปกับ URL ที่ Client ได้ทำการ Request เข้ามา โดย iOS ที่เขียนด้วย Objective-C จะใช้การ Request ข้อมูลผ่าน URL ด้วย initWithContentsOfURL ซึ่งจะได้ข้อมูลที่อยู่ในรูปแบบของ NSXMLParser ที่จะสามารถ delegate method ต่าง ๆ เพื่อค้นหา element ต่าง ๆ ที่ต้องการ

Web Server ฐานข้อมูล MySQL และ PHP ในการที่จะแปลงเป็น XML

CREATE TABLE `gallery` (
  `GalleryID` int(3) NOT NULL auto_increment,
  `Name` varchar(50) NOT NULL,
  `TitleName` varchar(150) NOT NULL,
  `Thumbnail` varchar(100) NOT NULL,
  PRIMARY KEY  (`GalleryID`)
) ENGINE=MyISAM  AUTO_INCREMENT=5 ;

-- 
-- Dumping data for table `gallery`
-- 

INSERT INTO `gallery` VALUES (1, 'Name 1', 'The my gallery title 1', 'http://www.thaicreate.com/url/girl1.jpg');
INSERT INTO `gallery` VALUES (2, 'Name 2', 'The my gallery title 2', 'http://www.thaicreate.com/url/girl2.jpg');
INSERT INTO `gallery` VALUES (3, 'Name 3', 'The my gallery title 3', 'http://www.thaicreate.com/url/girl3.jpg');
INSERT INTO `gallery` VALUES (4, 'Name 4', 'The my gallery title 4', 'http://www.thaicreate.com/url/girl4.jpg');

โครงสร้างของ MySQL Database

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

getGalleryXML.php ไฟล์ PHP สำหรับอ่าน MySQL Database และแปลงเป็น XML
<?php
header("Content-type:text/xml; charset=UTF-8");              
header("Cache-Control: no-store, no-cache, must-revalidate");             
header("Cache-Control: post-check=0, pre-check=0", false);   
echo '<?xml version="1.0" encoding="utf-8"?>';

$objConnect = mysql_connect("localhost","root","root");
$objDB = mysql_select_db("mydatabase");
$strSQL = "SELECT * FROM gallery WHERE 1  ";
$objQuery = mysql_query($strSQL);
?>
<gallery>
	<?php
	while($obResult = mysql_fetch_array($objQuery))
	{
	?>
		<image>
			<GalleryID><?php echo $obResult["GalleryID"];?></GalleryID>
			<Name><?php echo $obResult["Name"];?></Name>
			<TitleName><?php echo $obResult["TitleName"];?></TitleName>
			<Thumbnail><?php echo $obResult["Thumbnail"];?></Thumbnail>
		</image>
	<?php
	}
	?>
</gallery>
<?php
	mysql_close($objConnect);
?>


iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

เมื่อเรียกผ่าน URL จะได้ XML ดังรูป

<?xml version="1.0" encoding="utf-8"?>
<gallery>
	<image>
		<GalleryID>1</GalleryID>
		<Name>Name 1</Name>
		<TitleName>The my gallery title 1</TitleName>
		<Thumbnail>http://www.thaicreate.com/url/girl1.jpg</Thumbnail>
	</image>
	<image>
		<GalleryID>2</GalleryID>
		<Name>Name 2</Name>
		<TitleName>The my gallery title 2</TitleName>
		<Thumbnail>http://www.thaicreate.com/url/girl2.jpg</Thumbnail>
	</image>
	<image>
		<GalleryID>3</GalleryID>
		<Name>Name 3</Name>
		<TitleName>The my gallery title 3</TitleName>
		<Thumbnail>http://www.thaicreate.com/url/girl3.jpg</Thumbnail>
	</image>
		<image>
		<GalleryID>4</GalleryID>
		<Name>Name 4</Name>
		<TitleName>The my gallery title 4</TitleName>
		<Thumbnail>http://www.thaicreate.com/url/girl4.jpg</Thumbnail>
	</image>
</gallery>


iOS Objective-C การ Request ข้อมูล XML ที่อยู่บน Web Server
    NSURL *xmlURL = [NSURL URLWithString:@"http://www.thaicreate.com/url/getGalleryXML.php"];
    xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
    [xmlParser setDelegate: self];
    [xmlParser parse];

โดยหลังจากนี้จะพบกับ delegate method อยู่ 4-5 ตัว
// เมื่อเริ่มทำการ Parser
– parserDidStartDocument:

// เจอ Tag เปิดของ Element
– parser:didStartElement:namespaceURI:qualifiedName:attributes:

// เจอ String ใน Element ปัจจุบัน
– parser:foundCharacters:

// เจอ Tag ปิดของ Element
– parser:didEndElement:namespaceURI:qualifiedName:

// เมื่อเกิด Error
– parser:parseErrorOccurred:

// เมื่อทำการ Parser เสร็จสิ้น
– parserDidEndDocument:



Example การใช้ NSXMLParser อ่าน XML และการแสดงผลข้อมูลที่ได้บน Table View (UITableView)

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

เริ่มต้นด้วยการสร้าง Application แบบง่าย ๆ ด้วย Single View Application ดังรูป

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

เลือกและไม่เลือกรายการดังรูป

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

ตอนนี้หน้าจอ View จะยังว่าง ๆ

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

ให้ลาก Table View (UITableView) มาวางไว้บนหน้าจอ View

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

คลิกขวาที่ Table View ให้ทำการเชื่อม dataSource กับ delegete กับ File's Owner

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

ใน Class ของ .h ให้ทำการเชื่อม IBOutlet ให้เรียบร้อย จากนั้นเขียน Code ทั้งหมดดังนี้

ViewController.h
//
//  ViewController.h
//  tableViewXMLParser
//
//  Created by Weerachai on 12/8/55 BE.
//  Copyright (c) 2555 Weerachai. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,NSXMLParserDelegate>

@property (retain, nonatomic) IBOutlet UITableView *myTable;

@end


ViewController.m
//
//  ViewController.m
//  tableViewXMLParser
//
//  Created by Weerachai on 12/8/55 BE.
//  Copyright (c) 2555 Weerachai. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
{
    NSMutableArray *myObject;
    
    // A dictionary object
    NSMutableDictionary *dict;
    
    // Define keys
    NSString *galleryid;
    NSString *name;
    NSString *titlename;
    NSString *thumbnail;
    
    // Current Element
    NSString *currentElement;
    
    
    // Temp Variable
    NSMutableString *currentGalleryID, *currentName, *currentTitleName, *currentThumbnail;
    
    NSXMLParser *xmlParser;
}

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    
    // Define keys
    galleryid = @"GalleryID";
    name = @"Name";
    titlename = @"TitleName";
    thumbnail = @"Thumbnail";
    
    // Create array to hold dictionaries
    myObject = [[NSMutableArray alloc] init];
    
    NSURL *xmlURL = [NSURL URLWithString:@"http://www.thaicreate.com/url/getGalleryXML.php"];
    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: @"image"]){
        dict = [[NSMutableDictionary alloc] init];
        currentGalleryID = [[NSMutableString alloc] init];
        currentName = [[NSMutableString alloc] init];
        currentTitleName = [[NSMutableString alloc] init];
        currentThumbnail = [[NSMutableString alloc] init];
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    
    /*
    if([currentElement isEqualToString: @"GalleryID"]){
        [currentGalleryID appendString: string];
    }else if([currentElement isEqualToString: @"Name"]){
        [currentName appendString: string];
    }else if([currentElement isEqualToString: @"TitleName"]){
        [currentTitleName appendString: string];
    }else if([currentElement isEqualToString: @"Thumbnail"]){
        [currentThumbnail appendString: string];
    }
     */
    
    if(![[string stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString: @""]){
        
         if([currentElement isEqualToString: galleryid]){
             [currentGalleryID appendString: string];
         }else if([currentElement isEqualToString: name]){
             [currentName appendString: string];
         }else if([currentElement isEqualToString: titlename]){
             [currentTitleName appendString: string];
         }else if([currentElement isEqualToString: thumbnail]){
             [currentThumbnail appendString: string];
         }
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    
    /*
    if([elementName isEqualToString: @""GalleryID]){
        [dict setObject: currentGalleryID forKey: @"GalleryID"];
    }else if([elementName isEqualToString: @"Name"]){
        [dict setObject: currentName forKey: @"Name"];
    }else if([elementName isEqualToString: @"TitleName"]){
        [dict setObject: currentTitleName forKey : @"TitleName"];
    }else if([elementName isEqualToString: @"Thumbnail"]){
        [dict setObject: currentThumbnail forKey: @"Thumbnail"];
    }else if([elementName isEqualToString: @"image"]){
        [myObject addObject: dict];
    }
     */
        
    if([elementName isEqualToString: galleryid]){
        [dict setObject: currentGalleryID forKey: galleryid];
    }else if([elementName isEqualToString: name]){
        [dict setObject: currentName forKey: name];
    }else if([elementName isEqualToString: titlename]){
        [dict setObject: currentTitleName forKey: titlename];
    }else if([elementName isEqualToString: thumbnail]){
        [dict setObject: currentThumbnail forKey: thumbnail];
        
    // Add Object 
    }else if([elementName isEqualToString: @"image"]){
        [myObject addObject: dict];
    }
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {

    NSLog(@"Gallery list array has %d items", [myObject count]);
    NSMutableDictionary *gallery;
    for(int i = 0; i < [myObject count]; i ++){
        gallery = [myObject objectAtIndex: i];
        NSLog(@"\nGalleryID: %@\nName: %@\nTitleName: %@\nThumbnail: %@\n\n",
              [gallery objectForKey: galleryid],
              [gallery objectForKey: name],
              [gallery objectForKey: titlename],
              [gallery objectForKey: thumbnail]);
    }
    
    // Reload Data
    [_myTable reloadData];
}

// delegate for TableView

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return myObject.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        // Use the default cell style.
        cell = [[[UITableViewCell alloc] initWithStyle : UITableViewCellStyleSubtitle
                                       reuseIdentifier : CellIdentifier] autorelease];
    }
    
    
    NSDictionary *tmpDict = [myObject objectAtIndex:indexPath.row];
    
    NSURL *url = [NSURL URLWithString:[tmpDict objectForKey:thumbnail]];
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *img = [[UIImage alloc] initWithData:data];
    cell.imageView.image = img;
    
    cell.textLabel.text = [tmpDict objectForKey:name];
    cell.detailTextLabel.text= [tmpDict objectForKey:titlename];
    
    //[tmpDict objectForKey:galleryid]
    //[tmpDict objectForKey:name]
    //[tmpDict objectForKey:titlename]
    //[tmpDict objectForKey:thumbnail]
    
    return cell;
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)dealloc {
    [_myTable release];
    [super dealloc];
}
@end


Screenshot

iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)

แสดงการ XML Feed ด้วย NSXMLParser ซึ่งจะแสดงผลบน Table View

   
Share


ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท

ลองใช้ค้นหาข้อมูล


   
  By : ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ)
  Score Rating :  
  Create/Update Date : 2012-12-12 14:10:53 / 2014-09-07 13:35:39
  Download : Download  iOS/iPhone XML Parser / XML Feed from URL (NSXMLParser ,Objective-C)
Sponsored Links
 
 Sponsored Links / Related
 
iOS/iPhone and JSON (Create JSON and JSON Parsing, Objective-C)
Rating :
 
iOS/iPhone Table View and JSON (UITableView from JSON Parser)
Rating :
 
iOS/iPhone Passing JSON (NSJSONSerialization) Between View
Rating :
 
iOS/iPhone PHP/MySQL and JSON Parsing (Objective-C)
Rating :
 
iOS/iPhone Display Image on Table View from JSON URL (Web Site)
Rating :
 
iOS/iPhone Search Bar (UISearchBar) Data from Web Server Using JSON
Rating :
 
iOS/iPhone Picker View and JSON (UIPickerView)
Rating :
 
iOS/iPhone Collection View (UICollectionView) and JSON (Web Server URL)
Rating :
 
iOS/iPhone NSURLConnection and PHP MySQL / JSON (TableView,UITableView)
Rating :



Comunity Forum Free Web Script
Jobs Freelance Free Uploads
Free Web Hosting Free Tools

สอน PHP ผ่าน Youtube ฟรี
สอน Android การเขียนโปรแกรม Android
สอน Windows Phone การเขียนโปรแกรม Windows Phone 7 และ 8
สอน iOS การเขียนโปรแกรม iPhone, iPad
สอน Java การเขียนโปรแกรม ภาษา Java
สอน Java GUI การเขียนโปรแกรม ภาษา Java GUI
สอน JSP การเขียนโปรแกรม ภาษา Java
สอน Struts การเขียนโปรแกรม Java Struts Framework
สอน jQuery การเขียนโปรแกรม ภาษา jQuery
สอน Yii  Framework การเขียนโปรแกรม ภาษา PHP กับ Yii
สอน .Net การเขียนโปรแกรม ภาษา .Net

Free Tutorial
สอน Entity Framework
สอน Android
สอน Java เขียน Java
Java GUI Swing
สอน JSP (Web App)
iOS (iPhone,iPad)
Windows Phone
Windows Azure
Windows Store
Laravel Framework
Yii PHP Framework
สอน jQuery
สอน jQuery กับ Ajax
สอน PHP OOP (Vdo)
Ajax Tutorials
SQL Tutorials
สอน SQL (Part 2)
JavaScript Tutorial
Javascript Tips
Microsoft Access
MySQL Tutorials
-- Stored Procedure
MariaDB Database
SQL Server Tutorial
SQL Server 2005
SQL Server 2008
SQL Server 2012
-- Stored Procedure
Oracle Database
-- Stored Procedure
SVN (Subversion)
แนวทางการทำ SEO
ปรับแต่งเว็บให้โหลดเร็ว

สุดยอด Source Code V2.0
 

แจ้งชำระเงิน/โอนเงิน
 

Hit Link
   




Acc : thaicreate@hotmail.com






Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2015 All Rights Reserved.
for Contact Us : [Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 084-715-5121 อัตราราคา คลิกที่นี่

Back to Top