ios数据解析

来源:互联网 发布:宋孝宗 知乎 编辑:程序博客网 时间:2024/06/18 00:28


json数据解析

常用的框架:



代码:


plist解析:


xml解析

概念:







使用NSXMLParser解析代码:

<pre name="code" class="objc"><pre name="code" class="objc"><script src="/js/SyntaxHighlighter/jquery.highlighter.js?v=20091222" type="text/javascript"></script><script src="/js/SyntaxHighlighter/highlighter.js?v=20091222" type="text/javascript"></script><p><textarea cols="50" rows="15" name="code" class="classname">////  ViewController.m//  07-xml解析////  Created by apple on 15/1/19.//  Copyright (c) 2015年 apple. All rights reserved.//#import "ViewController.h"#import "Video.h"@interface ViewController ()<NSXMLParserDelegate>/**整个xml的数据容器*/@property(nonatomic,strong)NSMutableArray *videos;/**第3步拼接字符串*/@property(nonatomic,strong)NSMutableString *elementString;/**当前的模型*/@property(nonatomic,strong) Video *currentVideo;/**表格的所有数据*/@property (nonatomic, strong) NSMutableArray *dataList;@end@implementation ViewController- (void)setDataList:(NSMutableArray *)dataList{    _dataList = dataList;        // 只要重新给表格的数据容器赋值,就刷新    [self.tableView reloadData];        // 隐藏刷新控件    [self.refreshControl endRefreshing];}- (NSMutableArray *)videos{    if (_videos == nil) {        _videos = [NSMutableArray array];    }    return _videos;}- (NSMutableString *)elementString{    if (_elementString == nil) {        _elementString = [NSMutableString string];    }    return _elementString;}- (void)viewDidLoad {    [super viewDidLoad];    [self loadData];}#pragma mark - 加载数据- (IBAction)loadData{    // 1. url    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/videos.xml"];        // 2. 请求    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:2.0f];        // 3. 连接    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {                 // xml的解析        // 1. 实例化一个xml的解析器--通过代理来实现xml的解析        NSXMLParser *parse = [[NSXMLParser alloc] initWithData:data];                // 2. 设置代理        parse.delegate = self;                // 3. 解析器开始解析        [parse parse];    }];}#pragma mark - 代理方法//1.打开文档, 准备开始解析- (void)parserDidStartDocument:(NSXMLParser *)parser{    NSLog(@"1. 打开文档, 准备开始解析");        // 初始化数组容器, 清空容器,便于多次加载数据    [self.videos removeAllObjects];}//2.开始节点- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    NSLog(@"2.开始节点%@---%@", elementName, attributeDict);        // 如果开始节点的名称 是video,就创建一个对象    if ([elementName isEqualToString:@"video"]) {        self.currentVideo = [[Video alloc] init];                // 设置videoID        self.currentVideo.videoId = attributeDict[@"videoId"];    }        // 清空字符串的内容,因为马上要进入第3 个方法,要开始拼接当前的节点的内容    [self.elementString setString:@""];}//3. 发现节点里面内容- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{    NSLog(@"3. 发现节点里面内容--->%@", string);        // 开始拼接    [self.elementString appendString:string];}//4. 结束节点- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{    NSLog(@"4. 结束节点 %@", elementName);        if ([elementName isEqualToString:@"video"]) {        // 如果结束的节点是video, 需要把这个对象添加到数组        [self.videos addObject:self.currentVideo];            }else if (![elementName isEqualToString:@"videos"]){        [self.currentVideo setValue:self.elementString forKeyPath:elementName];    }        //    else if ([elementName isEqualToString:@"name"]) {// 如果结束节点,就可以把第二步创建的对象,设置name/length属性//        // 设置name属性//        // 1. 直接赋值////        self.currentVideo.name = self.elementString;//        // 2. KVC赋值////        [self.currentVideo setValue:self.elementString forKeyPath:@"name"];//        // 3. 改造//        [self.currentVideo setValue:self.elementString forKeyPath:elementName];//    }else if ([elementName isEqualToString:@"length"]){//        // 设置length属性////        self.currentVideo.length = @([self.elementString integerValue]);//        //        [self.currentVideo setValue:self.elementString forKeyPath:elementName];//    }else if ([elementName isEqualToString:@"videoURL"]){//        // 设置videoURL属性////        self.currentVideo.videoURL = self.elementString;//         [self.currentVideo setValue:self.elementString forKeyPath:elementName];//    }else if ([elementName isEqualToString:@"desc"]){//        // 设置desc属性////        self.currentVideo.desc = self.elementString;//         [self.currentVideo setValue:self.elementString forKeyPath:elementName];//    }else if ([elementName isEqualToString:@"teacher"]){//        // 设置teacher属性////        self.currentVideo.teacher = self.elementString;//         [self.currentVideo setValue:self.elementString forKeyPath:elementName];//    }    // cocoa 的大招 KVC}//5 结束文档- (void)parserDidEndDocument:(NSXMLParser *)parser{    NSLog(@"5 结束文档");    // xml真正解析结束, 可以更新UI, 在主线程    dispatch_async(dispatch_get_main_queue(), ^{        self.dataList = self.videos;    });    }#pragma tabel数据源方法- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return self.videos.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];        Video *video = self.dataList[indexPath.row];        cell.textLabel.text = video.name;        return cell;}@end</textarea> </p>


0 0
原创粉丝点击