博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML解析之SAX详解
阅读量:4913 次
发布时间:2019-06-11

本文共 4371 字,大约阅读时间需要 14 分钟。

XML解析之SAX详解

本文属于作者原创 http://www.cnblogs.com/ldnh/

XML解析的五个步骤

  • 1、打开文档

  • (void)parserDidStartDocument:(NSXMLParser *)parser ;

  • 2、开始查找起始标签

  • (void)parser:(NSXMLParser )parser didStartElement:(NSString )elementName namespaceURI:(NSString )namespaceURI qualifiedName:(NSString )qName attributes:(NSDictionary *)attributeDict;

  • 3、获取标签内容

  • (void)parser:(NSXMLParser )parser foundCharacters:(NSString )string

  • 4、查找结束标签

  • -(void)parser:(NSXMLParser )parser didEndElement:(NSString )elementName namespaceURI:(NSString )namespaceURI qualifiedName:(NSString )qName

  • 5、查询文档结束

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

解析详细代码

#import "ViewController.h"#import "JKPTrainInfo.h"@interface ViewController ()
@property (nonatomic,strong) NSMutableArray *dataList;@property (nonatomic,strong) UITableView *tableView;//因为下面多次要用,所以要建一个全局变量@property (nonatomic,strong) JKPTrainInfo *currentInfo;@property (nonatomic,strong) NSMutableString *muString;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.//加载视图[self initUI];//加载数据[self loadData];}#pragma mark -getter and setter methods-(NSMutableArray *)dataList{if (!_dataList) { _dataList = [NSMutableArray array];}return _dataList;}-(UITableView *)tableView{if (!_tableView) { _tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain]; _tableView.dataSource = self;}return _tableView;}- (NSMutableString *)muString{if (!_muString) { _muString = [NSMutableString string];}return _muString;}#pragma mark - UITableView dataSource- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return self.dataList.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {static NSString * identifiter = @"cellID";UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:identifiter];if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifiter];}JKPTrainInfo *JkpInfo = self.dataList[indexPath.row];cell.textLabel.text = JkpInfo.trainStation;cell.detailTextLabel.text = JkpInfo.arriveTime;return cell;}#pragma mark - NSXMLParserDelegate //1. 打开文件,开始解析-(void)parserDidStartDocument:(NSXMLParser *)parser{NSLog(@"打开文件,开始解析");//每次解析前进行清空操作-防止多次加载重复数据[self.dataList removeAllObjects];}//2. 查找起始标签- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{// NSLog(@"%@",elementName);// // NSLog(@"%@",attributeDict);if ([elementName isEqualToString:@"trainDetailInfo"]) { self.currentInfo = [[JKPTrainInfo alloc]init]; [self.currentInfo setValuesForKeysWithDictionary:attributeDict];}//清空muString 数据self.muString.string = @"";}//3.获取标签内容- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{// NSLog(@"%@",string);//防止多次执行获取内容的方法[self.muString appendString:string];}// 4.查找结束标签-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{// NSLog(@"%@",elementName);if ([elementName isEqualToString:@"trainDetailInfo"]) { [self.dataList addObject:self.currentInfo];}else if (![elementName isEqualToString:@"dataSet"]&&![elementName isEqualToString:@"diffgr:diffgram"]){ // self.muString是数据内容 [self.currentInfo setValue:self.muString forKey:elementName];}}//5.解析完成-(void)parserDidEndDocument:(NSXMLParser *)parser{NSLog(@"解析完成");//解析完成后刷新数据[self.tableView reloadData];}#pragma mark - event handle methods- (void)loadData{NSString *urlString = @"http://192.168.1.68/train.xml";NSURL *url = [NSURL URLWithString:urlString];NSURLRequest *requst = [NSURLRequest requestWithURL:url];[NSURLConnection sendAsynchronousRequest:requst queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { //XML解析 NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data]; parser.delegate = self; [parser parse]; }];}- (void)initUI{[self.view addSubview:self.tableView];}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.}@end

转载于:https://www.cnblogs.com/ldnh/p/5294605.html

你可能感兴趣的文章
Java技术预备作业
查看>>
阿虎烧烤的新感悟-O2O你真的会玩吗?
查看>>
Oracle10g闪回恢复区详细解析(转载)
查看>>
手把手教你从零认识webpack4.0
查看>>
(译)加入敌人和战斗:如果使用cocos2d制作基于tiled地图的游戏:第三部分
查看>>
[小米OJ] 3. 大数相减
查看>>
课后作业2:编写一个文件加解密程序,通过命令行完成加解密工作
查看>>
js 值类型和引用类型
查看>>
java语言将任意一个十进制数数字转换为二进制形式,并输出转换后的结果
查看>>
java相关。关于jsp中使用el表达式的格式,谢谢!
查看>>
GetDlgItem的用法小结
查看>>
java带包编译
查看>>
树状数组详解(重拾笔记)
查看>>
javascript深入理解js闭包
查看>>
PLSQL
查看>>
ASP.NET Core 应用程序Startup类介绍
查看>>
【python】-类的继承
查看>>
同一个POD中默认共享哪些名称空间
查看>>
HTTP协议详解
查看>>
xdebug调试的原理
查看>>