开发笔记7-XML解析

来源:互联网 发布:windows qt4.8.0下载 编辑:程序博客网 时间:2024/05/16 10:44

今天拿来同学在新浪实习时做的一个新闻阅读器,就是访问新浪指定的URL获取XML文件,里面有新闻的标题、日期和具体网页的链接,觉得不错,正好弥补了之前只做了json格式数据的封装和解析。

突然上来看有些费劲,查了下百度,就搜到了CSDN的博客有这方面的知识,参考链接:http://blog.csdn.net/smallmuou/article/details/7404330,有了大致的认识,开始新闻阅读器的程序阅读:

-(void)parser{NSURL *url=[NSURL URLWithString:@"http://**/ddt.xml"];NSData *data=[NSData dataWithContentsOfURL:url];NSXMLParser *xmlParser=[[NSXMLParser alloc]initWithData:data];xmlParser.delegate=self;[xmlParser parse];[xmlParser release];}

为了避嫌就不公开那个XML的链接地址了,总之是能够获得数据并初始化好一个解析器,调用解析器方法parse就开始解析,当然必须实现XML解析协议方法,不过我这个同学没有在接口出声明遵守XML解析协议,照样可以解析XML,但方法还是协议中的:

- (void)parserDidStartDocument:(NSXMLParser *)parser{[arr removeAllObjects];}- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{if([elementName isEqualToString:@"item"]){aNews= [[News alloc] init];}else if([elementName isEqualToString:@"title"]){[str setString:@""];}else if([elementName isEqualToString:@"description"]){[str setString:@""];}else if([elementName isEqualToString:@"link"]){[str setString:@""];}else if([elementName isEqualToString:@"pubDate"]){[str setString:@""];}}- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{[str appendString:string];}- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{if([elementName isEqualToString:@"item"]){[arr addObject:aNews];}else if([elementName isEqualToString:@"title"]){NSString *str1=[NSString stringWithString:str];aNews.title = [str1 substringFromIndex:5];}else if([elementName isEqualToString:@"description"]){aNews.description = [NSString stringWithString:str];}else if([elementName isEqualToString:@"link"]){aNews.link = [NSURL URLWithString:str];}else if([elementName isEqualToString:@"pubDate"]){aNews.date=[NSString stringWithString:str];}}- (void)parserDidEndDocument:(NSXMLParser *)parser{[self.mytable reloadData];}

确实比json复杂一些,获得数据都是在结束标签时进行,这个解析结束就让tableView重载自己的数据,达到更新的目的。

原创粉丝点击