一、JSON解析数据

 //
// VideoModel.h
// IOS_0130_网络视频
//
// Created by ma c on 16/1/30.
// Copyright © 2016年 博文科技. All rights reserved.
// #import <Foundation/Foundation.h> @interface VideoModel : NSObject @property (nonatomic, assign) int id;
@property (nonatomic, assign) int length;
@property (nonatomic, copy) NSString *image;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *url; + (instancetype)videoWithDict:(NSDictionary *)dict; @end //
// VideoModel.m
// IOS_0130_网络视频
//
// Created by ma c on 16/1/30.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "VideoModel.h" @implementation VideoModel + (instancetype)videoWithDict:(NSDictionary *)dict
{
VideoModel *model = [[VideoModel alloc] init];
[model setValuesForKeysWithDictionary:dict];
return model;
} @end
 //
// VideosTableViewController.m
// IOS_0130_网络视频
//
// Created by ma c on 16/1/30.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "VideosTableViewController.h"
#import "MBProgressHUD+MJ.h"
#import "UIImageView+WebCache.h"
#import "VideoModel.h"
#import <MediaPlayer/MediaPlayer.h> #define url(path) [NSURL URLWithString:[NSString stringWithFormat:@"http://localhost:8080/MJServer/%@",path]] @interface VideosTableViewController () @property (nonatomic, strong) NSMutableArray *arrModel; @end @implementation VideosTableViewController - (void)viewDidLoad {
[super viewDidLoad];
//加载视频信息
[self loadVideo];
}
- (NSMutableArray *)arrModel
{
if (!_arrModel) {
_arrModel = [[NSMutableArray alloc] init];
}
return _arrModel;
} - (void)loadVideo
{
//1.创建NSURL
NSURL *url = url(@"video");
//2.创建请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//3.发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
if (connectionError || data == nil) {
[MBProgressHUD showError:@"网络繁忙,请稍后再试"];
return;
}
//解析JSON数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
NSArray *arr = dict[@"videos"]; for (NSDictionary *dict in arr) {
VideoModel *model = [VideoModel videoWithDict:dict]; [self.arrModel addObject:model];
}
[self.tableView reloadData]; }];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} #pragma mark - Table view data source - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.arrModel.count;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *ID = @"video";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
} VideoModel *model = self.arrModel[indexPath.row]; cell.textLabel.text = model.name; NSString *time = [NSString stringWithFormat:@"时长:%d分钟",model.length];
cell.detailTextLabel.text = time; //显示视频截图 NSURL *url = url(model.image);
[cell.imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"1.jpg"]]; return cell;
} - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
VideoModel *model = self.arrModel [indexPath.row]; //创建系统自带的视频播放器
NSURL *url = url(model.url);
MPMoviePlayerViewController *playerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
//显示视频播放器
[self presentViewController:playerVC animated:nil completion:nil];
} @end

二、XML解析数据

 //
// VideoModel.h
// IOS_0130_网络视频
//
// Created by ma c on 16/1/30.
// Copyright © 2016年 博文科技. All rights reserved.
// #import <Foundation/Foundation.h> @interface VideoModel : NSObject @property (nonatomic, assign) int id;
@property (nonatomic, assign) int length;
@property (nonatomic, copy) NSString *image;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *url; + (instancetype)videoWithDict:(NSDictionary *)dict; @end //
// VideoModel.m
// IOS_0130_网络视频
//
// Created by ma c on 16/1/30.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "VideoModel.h" @implementation VideoModel + (instancetype)videoWithDict:(NSDictionary *)dict
{
VideoModel *model = [[VideoModel alloc] init];
[model setValuesForKeysWithDictionary:dict];
return model;
} @end
 //
// VideosTableViewController.m
// IOS_0130_网络视频
//
// Created by ma c on 16/1/30.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "VideosTableViewController.h"
#import "MBProgressHUD+MJ.h"
#import "UIImageView+WebCache.h"
#import "VideoModel.h"
#import <MediaPlayer/MediaPlayer.h>
#import "GDataXMLNode.h" #define url(path) [NSURL URLWithString:[NSString stringWithFormat:@"http://localhost:8080/MJServer/%@",path]] @interface VideosTableViewController ()<NSXMLParserDelegate> @property (nonatomic, strong) NSMutableArray *arrModel; @end @implementation VideosTableViewController /*
IOS中的XML解析方法
1>苹果原生
NSXMLParser:SAX方式解析,使用简单
2>第三方框架
libxml2:纯C语言,默认包含在IOS SDK中,同时支持DOM和SAX方式解析
GDataXML:DOM解析,由Google开发,基于libxml2
3>建议
大文件:NSXMLParser、libxml2
小文件:GDataXML
4>XML解析方式
SAX:一次性将整个XML文档加载进内存,适合解析小文件
DOM:(事件驱动)- 从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件
5>GDataXML常用的类
GDataXMLDocument:代表整个XML文档
GDataXMLElement:代表XML元素 */ - (void)viewDidLoad {
[super viewDidLoad];
//加载视频信息
[self loadVideo];
}
- (NSMutableArray *)arrModel
{
if (!_arrModel) {
_arrModel = [[NSMutableArray alloc] init];
}
return _arrModel;
} - (void)loadVideo
{
//1.创建NSURL
NSURL *url = url(@"video?type=XML");
//2.创建请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//3.发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { if (connectionError || data == nil) {
[MBProgressHUD showError:@"网络繁忙,请稍后再试"];
return;
}
//使用GDataXML - 解析XML数据
//[self useGDataXMLWithData:data]; //使用NSXMLParser解析XML数据
[self useNSXMLParserWithData:data];
}];
}
#pragma mark - NSXMLParser解析XML
- (void)useNSXMLParserWithData:(NSData *)data
{
//1.创建XML解析器 - SAX - 逐个往下解析
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
//2.设置代理
parser.delegate = self;
//3.开始解析
[parser parse];
//4.刷新表格
[self.tableView reloadData];
} #pragma mark - NSXMLParser的代理方法
//解析到文档开头是时调用
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
//NSLog(@"parserDidStartDocument");
}
//解析到一个元素的开始就会调用
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
//NSLog(@"didStartElement------%@",elementName); NSLog(@"attributeDict:%@",attributeDict); if ([elementName isEqualToString:@"videos"]) return; VideoModel *model = [VideoModel videoWithDict:attributeDict];
[self.arrModel addObject:model]; }
//解析到一个元素的结束就会调用
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
//NSLog(@"didEndElement------%@",elementName);
}
//解析到文档结尾时调用
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
//NSLog(@"parserDidEndDocument");
} #pragma mark - GDataXML方法
- (void)useGDataXMLWithData:(NSData *)data
{
//解析XML数据
//加载XML文件
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data error:nil]; //获取文档的根元素 -- videos元素
GDataXMLElement *root = doc.rootElement; //获取根元素里面所有video元素
NSArray *elements = [root elementsForName:@"video"]; //遍历所有的video元素
for (GDataXMLElement *videoElement in elements) {
VideoModel *model = [[VideoModel alloc] init]; //取出元素属性
model.id = [videoElement attributeForName:@"id"].stringValue.intValue;
model.length = [videoElement attributeForName:@"length"].stringValue.intValue;
model.name = [videoElement attributeForName:@"name"].stringValue;
model.image = [videoElement attributeForName:@"image"].stringValue;
model.url = [videoElement attributeForName:@"url"].stringValue; //添加到数组中
[self.arrModel addObject:model];
}
//刷新表格
[self.tableView reloadData];
} #pragma mark - Table view data source - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.arrModel.count;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *ID = @"video";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
} VideoModel *model = self.arrModel[indexPath.row]; cell.textLabel.text = model.name; NSString *time = [NSString stringWithFormat:@"时长:%d分钟",model.length];
cell.detailTextLabel.text = time; //显示视频截图 NSURL *url = url(model.image);
[cell.imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"1.jpg"]]; return cell;
} - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
VideoModel *model = self.arrModel [indexPath.row]; //创建系统自带的视频播放器
NSURL *url = url(model.url);
MPMoviePlayerViewController *playerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
//显示视频播放器
[self presentViewController:playerVC animated:nil completion:nil];
} @end

IOS-网络(JSON解析数据与XML解析数据)的更多相关文章

  1. IOS 网络浅析-(五 xml解析)

    XML 可扩展标记语言 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言 易读性高,编码手写难度小,数据量大 NSXMLPars ...

  2. 网络数据的XML解析

    网络应用中的数据解析,因为最近的应用,无论是Android的和ios平台的,一直用也是建议用的都是Json解析, xml解析都有点被遗忘了. 然后最近自己在做着玩一个ios的小应用,涉及网络数据的抓取 ...

  3. Android中级之网络数据解析一之xml解析

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! --Comic Sans MS Xml解析具有跨平台性,语言无关性,易操作性,因此广受开发者的欢迎. ...

  4. IOS开发之路三(XML解析之KissXML的使用)

    最近再做一个项目需要用到xml的解析.今天查了一些资料自己做了一个小demo.纯OC没有界面.. 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用 ...

  5. IOS开发之路三(XML解析之GDataXML的使用)

    最近再做一个项目需要用到xml的解析.今天查了一些资料自己做了一个小demo.纯OC没有界面.. 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用 ...

  6. IOS网络第二天 - 04-黑酷-GDataXML 解析

    ****** - (void)viewDidLoad { [super viewDidLoad]; /** 加载服务器最新的视频信息 */ // 1.创建URL NSURL *url = HMUrl( ...

  7. Oracle表数据转换为XML格式数据

    转自:https://blog.csdn.net/smile_caijx/article/details/83352927 使用DBMS_XMLGEN可以解决问题 SELECT DBMS_XMLGEN ...

  8. iOS网络请求之数据解析

    JSON解析 IOS中Json解析的四种方法 NSURLConnection-网络请求浅析 IOS开发:官方自带的JSON使用 XML 解析 GDataXMLNode应用 IOS学习:常用第三方库(G ...

  9. 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)

    一: iOS中xml解析的几种方式简介 1.官方原生 NSXMLParser :SAX方式解析,使用起来比较简单 2.第三方框架 libxml2 :纯C 同时支持DOM与SAX GDataXML: D ...

随机推荐

  1. square-and-multiply algorithm

    https://en.wikipedia.org/wiki/Square-and-multiply_algorithm

  2. handle exceptions, opening and closing database connections

    https://www.tutorialspoint.com/spring/spring_jdbc_framework.htm Spring - JDBC Framework Overview Whi ...

  3. Ubuntu proxychains && setProxy及 unsetProxy

    https://www.socks-proxy.net/ (ubuntu proxy )[ lantern -addr 0.0.0.0:8787 proxychains4 printenv http: ...

  4. docker网络部分源码分析

    daemon初始化network controller daemon的配置,网络部分的内容在cmd/dockerd/config_common_unix.go中指定,默认设置一般都为空 // daem ...

  5. mysql 数据操作 单表查询 where 约束 目录

    mysql 数据操作 单表查询 where约束 between and or mysql 数据操作 单表查询 where约束 is null in mysql 数据操作 单表查询 where约束 li ...

  6. JAVA 对象内存结构

    JAVA对象内存结构 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding). 对象头 markWo ...

  7. Selenium之firefox浏览器的启动

    1.编写如下代码 import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; /** ...

  8. Selenium IDE脚本录制步骤简介

    录制脚本步骤: 1.打开Selenium IDE,输入需要录制脚本的地址,然后启动Firefox,输入selenium IDE需录制的地址,根据实际需求,做相关操作: 2.录制过程中,会发现做的相关操 ...

  9. 1.2 Getting Started--Naming Conventions(命名约定)

    Ember.js使用一个运行时解析器去连接你的对象而没有很多样板文件.作为一个开发者,如果你把code放到约定好的位置这个解析器会自动工作.   一.The Application     1. 当你 ...

  10. 非线性方程(组):一维非线性方程(二)插值迭代方法 [MATLAB]

    一般而言,方程没有能够普遍求解的silver bullet,但是有几类方程的求解方法已经非常清晰确凿了,比如线性方程.二次方程或一次分式.一次方程可以直接通过四则运算反解出答案,二次方程的求根公式也给 ...