IOS-网络(JSON解析数据与XML解析数据)
一、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解析数据)的更多相关文章
- IOS 网络浅析-(五 xml解析)
XML 可扩展标记语言 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言 易读性高,编码手写难度小,数据量大 NSXMLPars ...
- 网络数据的XML解析
网络应用中的数据解析,因为最近的应用,无论是Android的和ios平台的,一直用也是建议用的都是Json解析, xml解析都有点被遗忘了. 然后最近自己在做着玩一个ios的小应用,涉及网络数据的抓取 ...
- Android中级之网络数据解析一之xml解析
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! --Comic Sans MS Xml解析具有跨平台性,语言无关性,易操作性,因此广受开发者的欢迎. ...
- IOS开发之路三(XML解析之KissXML的使用)
最近再做一个项目需要用到xml的解析.今天查了一些资料自己做了一个小demo.纯OC没有界面.. 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用 ...
- IOS开发之路三(XML解析之GDataXML的使用)
最近再做一个项目需要用到xml的解析.今天查了一些资料自己做了一个小demo.纯OC没有界面.. 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用 ...
- IOS网络第二天 - 04-黑酷-GDataXML 解析
****** - (void)viewDidLoad { [super viewDidLoad]; /** 加载服务器最新的视频信息 */ // 1.创建URL NSURL *url = HMUrl( ...
- Oracle表数据转换为XML格式数据
转自:https://blog.csdn.net/smile_caijx/article/details/83352927 使用DBMS_XMLGEN可以解决问题 SELECT DBMS_XMLGEN ...
- iOS网络请求之数据解析
JSON解析 IOS中Json解析的四种方法 NSURLConnection-网络请求浅析 IOS开发:官方自带的JSON使用 XML 解析 GDataXMLNode应用 IOS学习:常用第三方库(G ...
- 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)
一: iOS中xml解析的几种方式简介 1.官方原生 NSXMLParser :SAX方式解析,使用起来比较简单 2.第三方框架 libxml2 :纯C 同时支持DOM与SAX GDataXML: D ...
随机推荐
- Python 百度语音识别与合成REST API及ffmpeg使用
操作系统:Windows Python:3.5 欢迎加入学习交流QQ群:657341423 百度语音识别官方文档 百度语音合成官方文档 注意事项:接口支持 POST 和 GET两种方式,个人支持用po ...
- python网络编程知识体系
python的网络编程包括: 1.mvc-socket-线程-进程-并发-IO异步-消费者生产者 2.mysql-paramiko-审计堡垒机-redis-分布式监控 线程.进程 和 协程 原理剖析 ...
- JSP学习(第一课)
JSP页面组成: 比如: 打开网页,右键查看源代码: 打开网页: 注意: <%!%>里面定义的属性是成员属性,相当于类的属性,方法相当于是全局的方法,相当于是类里面的方法.但是它是不可以进 ...
- mysql 约束条件 primary key 主键
primary key字段的值不为空且唯一 约束:not null unique 存储引擎:innodb 对于innodb来说,一张表内必须有一个主键 单列做主键多列做主键(复合主键) 通常都是id字 ...
- 跟我学Makefile(六)
shell 函数 :和反引号“`”是相同的功能 . shell 函数把执行操作系统命令后的输出作为函数返回. contents := $(shell cat foo) files := $(shell ...
- 1.1 、Django 后台
Django 后台 与后台相关文件:每个app中的 admin.py 文件与后台相关. 一,新建一个 名称为 HelloDjango 的项目 django-admin.py startproject ...
- Session应用之验证码
package com.aeolia.view; import java.awt.Color; import java.awt.Font; import java.awt.image.Buffered ...
- (转) bicabo Visual Studio 2012自动添加注释(如版权信息等)
如何使用Visual Studio 2012给程序文件的头部自动添加如下的注释? /********************************************************** ...
- 001-mybatis框架
架构分析: 1. 读SqlMapConfig.xml. 当调用与数据库有关的操作的时候,会读SqlMapConfig.xml文件中的信息,里面配置了Mybatis的运行环境信息,加载mapper.xm ...
- Java基础学习笔记(一)
Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...