ios数据解析


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>


 
 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值