`
auauau
  • 浏览: 172170 次
社区版块
存档分类
最新评论

iphone xml parser

    博客分类:
  • iOS
阅读更多

#import <UIKit/UIKit.h>


@interface MoreAppViewController : UITableViewController {
	UIActivityIndicatorView * activityIndicator;

	NSXMLParser *xmlParser;
	NSMutableArray *appList;
	NSMutableDictionary *item;
	
	NSString *currentElement;
	NSMutableString *name, *description, *picurl, *url;
}

-(id)init;

-(void) parseXMLFileAtURL:(NSString*)URL;

@end


#import "MoreAppViewController.h"


@implementation MoreAppViewController

-(id)init{
	self = [super init];
	if(self!=nil){
		self.title = @"More";
	}
	return self;
}
/*
 // The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Custom initialization
    }
    return self;
}
*/


// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
	[super loadView];
	if ([appList count] == 0) {
		
		/*
		// make the activity indicator as the right side button
		CGRect frame = CGRectMake(0.0, 0.0, 25.0, 25.0);
		activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:frame];
		[activityIndicator startAnimating];
		[activityIndicator sizeToFit];
		activityIndicator.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
											  UIViewAutoresizingFlexibleRightMargin |
											  UIViewAutoresizingFlexibleTopMargin |
											  UIViewAutoresizingFlexibleBottomMargin);
		
		UIBarButtonItem *loadingView = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
		loadingView.target = self;
		self.navigationItem.rightBarButtonItem = loadingView;
		*/
		NSString * path = @"http://www.host.net/info/info.xml";
		[self parseXMLFileAtURL:path];
	}
	
}


-(void) parseXMLFileAtURL:(NSString*)URL{
	appList = [[NSMutableArray alloc]init];
	//you must then convert the path to a proper NSURL or it won't work
	NSURL *xmlURL = [NSURL URLWithString:URL];
	
	// here, for some reason you have to use NSClassFromString when trying to alloc NSXMLParser, otherwise you will get an object not found error
	// this may be necessary only for the toolchain
	xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
	
	// Set self as the delegate of the parser so that it will receive the parser delegate methods callbacks.
	[xmlParser setDelegate:self];
	
	// Depending on the XML document you're parsing, you may want to enable these features of NSXMLParser.
	[xmlParser setShouldProcessNamespaces:NO];
	[xmlParser setShouldReportNamespacePrefixes:NO];
	[xmlParser setShouldResolveExternalEntities:NO];
	
	[xmlParser parse];
}

- (void)parserDidStartDocument:(NSXMLParser *)parser {
	NSLog(@"found file and started parsing");
}

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
	NSString * errorString = [NSString stringWithFormat:@"Unable to download story feed from web site (Error code %i )", [parseError code]];
	NSLog(@"error parsing XML: %@", errorString);
	
	UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
	[errorAlert show];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
	//NSLog(@"found this element: %@", elementName);
	currentElement = [elementName copy];
	
	if ([elementName isEqualToString:@"app"]) {
		// clear out our story item caches...
		item = [[NSMutableDictionary alloc] init];
		name = [[NSMutableString alloc] init];
		description = [[NSMutableString alloc] init];
		picurl = [[NSMutableString alloc] init];
		url = [[NSMutableString alloc] init];
	}
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
	
	//NSLog(@"ended element: %@", elementName);
	if ([elementName isEqualToString:@"app"]) {
		// save values to an item, then store that item into the array...
		[item setObject:name forKey:@"name"];
		[item setObject:description forKey:@"description"];
		[item setObject:picurl forKey:@"picurl"];
		[item setObject:url forKey:@"url"];
		
		[appList addObject:[item copy]];
		NSLog(@"adding story: %@", name);
	}
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
	//NSLog(@"found characters: %@", string);
	// save the characters for the current item...
	if ([currentElement isEqualToString:@"name"]) {
		[name appendString:string];
	} else if ([currentElement isEqualToString:@"description"]) {
		[description appendString:string];
	} else if ([currentElement isEqualToString:@"picurl"]) {
		[picurl appendString:string];
	} else if ([currentElement isEqualToString:@"url"]) {
		[url appendString:string];
	}
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {
	
	[activityIndicator stopAnimating];
	[activityIndicator removeFromSuperview];
	
	NSLog(@"all done!");
	NSLog(@"stories array has %d items", [appList count]);
	//[newsTable reloadData];
	[self.tableView reloadData];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
	return [appList count];
}

- (UITableViewCell *)tableView:(UITableView *)mtableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
	static NSString *CellIdentifier = @"app-flist-cell";
	UITableViewCell *cell = (UITableViewCell*)[mtableView dequeueReusableCellWithIdentifier:CellIdentifier];
	if (!cell){
		cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease];
	}
	NSUInteger row = [indexPath row];
	NSDictionary *caiDictionary = [appList objectAtIndex:row];
	cell.textLabel.text = [caiDictionary objectForKey:@"name"];
	cell.detailTextLabel.text = [caiDictionary objectForKey:@"description"];
	NSString *iconurl = [caiDictionary objectForKey:@"picurl"];
	//if([picurl1 isEqualToString:@""]){
		
	////}
	NSLog(@"%@",iconurl);
	NSURL *iconurl_1 = [NSURL URLWithString:iconurl];
	NSData *data = [NSData dataWithContentsOfURL:iconurl_1];
	UIImage *img = [[UIImage alloc]initWithData:data];
	cell.imageView.image = [UIImage imageNamed:@"icon.png"];
	//cell.imageView.image = img;
	[img release];
	cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
	return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	NSLog(@"#######");
	NSUInteger row = [indexPath row];
	NSDictionary *dictionary = [appList objectAtIndex:row];
	NSString *appurl = [dictionary objectForKey:@"url"];
	NSLog(@"##%@",appurl);
	//[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url1]];
	//NSString *thePhone = [NSString stringWithFormat:@"tel:%@",theNumber];
	//NSURL *url = [[NSURL alloc] initWithString:thePhone];
	NSURL *ccj = [NSURL URLWithString:appurl];
	BOOL a = [[UIApplication sharedApplication] openURL:ccj];
	if(a){
		NSLog(@"00");
	}else{
		NSLog(@"001");
	}

	//[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456"]];
}


/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
}
*/

/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
	// Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
	
	// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
	// Release any retained subviews of the main view.
	// e.g. self.myOutlet = nil;
}


- (void)dealloc {
    [super dealloc];
}


@end



NSString *url = [[NSString alloc] initWithFormat:@"http://www.example.com.pt/iPhone/resize.php?max_height=80&max_width=58&qt=80&imgpath=%@",[aNoticia.img substringFromIndex:3]];
	cell.imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[ NSURL URLWithString:url]]];
分享到:
评论
1 楼 yjl824690388 2010-06-08  
请问楼主这个XML可以是本地的文件吗, 若可以请问与以上代码有哪些差别.

相关推荐

    XMLParser iphone

    XMLParser在iOS开发中是一种常用的解析XML数据的工具,它允许开发者将XML文件转换为可操作的数据结构,便于在iPhone应用程序中使用。XML(Extensible Markup Language)是一种标记语言,常用于存储和传输结构化数据...

    iPhone xml rss解析

    本示例主要探讨如何在iPhone应用中解析XML结构的RSS feed,以便将新闻标题展示在表格视图中。 首先,让我们了解XML的基本概念。XML是一种标记语言,用于描述数据的结构和内容。它使用自定义的标签来表示数据,使得...

    iphone开发之xml解析

    除了`NSXMLParser`,iOS还提供了`XMLParser`类,它是C语言接口,同样支持DOM和SAX解析。另外,第三方库如GDataXML-ObjectiveC提供了一个更易用的DOM解析接口。 3. 更多XML解析方法: 除了DOM和SAX,还有基于Pull...

    iphone中xml的解析demo

    对于有经验的开发者,这个简单的XML解析示例可能过于基础,他们可能会考虑使用更高效的解析库,如GDataXML或者使用Swift的XMLParser,它们提供了更高级的功能,如异步解析和更好的性能。此外,还可以探索XPath或XML ...

    iphone开发XML解析

    本教程将重点介绍如何在iPhone应用中进行XML解析,使开发者能够理解并有效地处理XML数据。 首先,我们需要了解XML的基本概念。XML是一种标记语言,它的结构由元素(Elements)、属性(Attributes)、文本内容(Text...

    iphone中XML解析例子

    XML的灵活性和可扩展性使得它成为网络开发中的重要工具,尤其是在服务器与移动设备如iPhone之间交换数据时。本篇文章将深入探讨如何在iPhone应用中进行XML解析。 首先,我们需要了解在iOS中解析XML的两种主要方法:...

    iphone使用GDataXMLParser解析xml文件小结

    在iOS开发中,XML(eXtensible Markup Language)是一种常用的数据交换格式,它用于存储结构化数据。本文将深入探讨如何使用...在实际项目中,可以根据需要扩展XMLParser类,以适应更复杂的XML结构和业务需求。

    iphone开发xml解析

    ### iPhone开发中的XML解析详解 在移动应用开发领域,尤其是针对iPhone的应用开发中,XML(Extensible Markup Language)解析是一项关键技术。XML作为一种广泛使用的数据交换格式,在web服务、配置文件处理以及各种...

    iphone 解析XML的demo

    本Demo是针对iPhone平台设计的一个XML解析示例,旨在帮助开发者了解如何在Objective-C中处理XML数据。 XML文件结构清晰,易于人阅读,同时也方便机器解析。在iOS中,有两种主要的XML解析方式:SAX(Simple API for ...

    iPhone编程解析xml

    本教程将深入探讨如何在iPhone应用程序中解析XML文件,主要涉及的技术点包括Objective-C编程、网络连接以及NSXMLParser类的使用。 首先,我们要了解XML的基本结构。XML文档由元素、属性、文本内容等组成,通过层次...

    xml.zip_iphone访问webservice视频_xml_数据解析

    - 解析器的代理方法会在遇到XML元素时被调用,例如`parser:didStartElement:namespaceURI:qualifiedName:attributes:`和`parser:foundCharacters:`。 - 在这些方法中,可以收集元素的信息并填充数据模型。 6. **...

    iphone开发之xml解析流程小结

    本文将深入探讨iPhone开发中的XML解析流程,帮助开发者更好地理解和使用这一技术。 首先,我们要了解XML的基本概念。XML是一种自描述性的标记语言,它的结构清晰,易于人阅读,同时也方便机器解析。在iOS开发中,...

    iPhone/iPad 开发: 解析本地/网络上的xml文件(实例建附件)

    本文将深入探讨如何在iPhone和iPad应用中处理XML文件,以"XMLDemo"为例,来讲解相关技术。 首先,XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件等领域。它的结构清晰...

    XML.zip_XML 解析_c xml_sbjson x_xml

    本教程将引导初学者了解如何在iPhone开发中使用XML和JSON进行数据解析。 XML是一种标记语言,允许开发者定义自定义的标签来描述数据结构。它的主要优点在于结构清晰,易于人类阅读,并且有强大的支持库,可以在各种...

    Objective-c对象组装XML

    XmlPackage *xmlPackage = [[XmlPackage alloc]init]; NSData *data = [xmlPackage objctPackage:map objectName:@"book1" xmlTemplateName:@"template1"]; 或者 NSData *data = [xmlPackage listPackage:list ...

    iphone NSXMLParser

    在标题“iPhone NSXMLParser”中,我们关注的是如何在iPhone应用程序中使用`NSXMLParser`来解析XML文件。这个过程通常包括以下步骤: 1. **初始化解析器**:首先,你需要创建一个`NSXMLParser`实例,并传入XML数据...

    基于iPhone 设计的RSS阅读应用(RssReader)

    然后,利用NSXMLParser或Swift的XMLParser进行解析,提取出标题、描述、链接等关键信息。为了提高性能,可以考虑将解析后的数据存储在Core Data中,实现离线阅读。 考虑到用户体验,RssReader应用应具备自动刷新和...

    IOS应用源码之【应用】-联通话费速查(含iPhoneApp以及服务器Mac App).rar

    其中,用户界面设计可能用到Storyboard或SwiftUI,网络请求可能使用URLSession或第三方库如Alamofire,数据解析则可能是JSON或XML格式,需要用到JSONSerialization或XMLParser等。 服务器端的Mac App通常是用来处理...

    TouchXML使用教程

    使用TouchXML在iPhone开发、iPad开发中实现XML_Parser

    微信小程序之解析XML数据

    由于公司业务需要开发一个微信小程序,起初并没有太在意解析XML这个问题,因为小程序是用的JS,所以直接用DOMParser解析就好了嘛,而且在微信开发者工具上也是能正常跑的,然后问题来了,部署到iphone7上运行的时候...

Global site tag (gtag.js) - Google Analytics