凌雪
2018-10-23
来源 :网络
阅读 1231
评论 0
摘要:本文将带你了解IOS开发入门iOS网络开发教程之XML解析,希望本文对大家学IOS有所帮助。
本文将带你了解IOS开发入门iOS网络开发教程之XML解析,希望本文对大家学IOS有所帮助。
XML简介
什么是XML?
全称是 ExtensibleMarkupLanguage. 可扩展标记语言.
跟JSON一样,也是常用的一种用于交互的数据格式
一般也叫做XML文档 ( XML Document )
XML举例
<videos><video length="30" name="小黄人 第01部"><video length="19" name="小黄人 第02部"><video length="33" name="小黄人 第03部"> </video></video></video></videos>
XML语法:
一个常见的XML文档一般由以下部分组成
文档声明
元素 ( Element )
一个元素包括了开始标签和结束标签
拥有内容的元素:
<video>
小黄人</video>
没有内容的元素:
<video>
</video>
没有内容的元素简写:
<video>
一个元素可以嵌套若干个子元素(不能出现交叉嵌套) <videos>
<video>
<name>小黄人 第01部</name> <length>30</length></video>
</videos> 规范的XML文档最多只有1个根元素,其他元素都是根元素的子孙元素</video>
属性 ( Attribute )
<video length="30" name="小黄人 第01部">
video元素拥有name和length两个属性 属性值必须用 双引号"" 或者 单引号'' 括住 实际上,属性表示的信息也可以用子元素来表示,比如
<video>
<name>小黄人 第01部</name> <length>30</length></video>
</video>
XML解析
XML的解析方式有2种
DOM: 一次性将整个XML文档加载进内存,比较适合解析小文件SAX: 从根元素开始,按顺序一个元素一个元素往下解析,比较适合 解析大文件
SAX解析:( NSXMLParser )
#import "ViewController.h"
#import "UIImageView+WebCache.h"
#import <mediaplayer mediaplayer.h="">
#import "ZYVideo.h"
#import "MJExtension.h"
#define baseUrlStr @"https://120.25.226.186:32812"
@interface ViewController ()<nsxmlparserdelegate>
/* 存储模型的 数组 */
@property (nonatomic, strong) NSMutableArray *videos;
@end
@implementation ViewController
- (NSMutableArray *)videos
{
if (!_videos) {
_videos = [NSMutableArray array];
}
return _videos;
}
- (void)viewDidLoad {
[super viewDidLoad];
// 替换 模型中属性的名称 和 系统关键字冲突.(系统自带方法冲突)
[ZYVideo mj_setupReplacedKeyFromPropertyName:^NSDictionary *{
return @{
@"ID" : @"id"
};
}];
//1. 确定url
NSURL *url = [NSURL URLWithString:@"https://localhost:8080/MJServer/video?method=get&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) {
return ;
}
// 4. 解析数据(反序列化)
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
// 开始解析: parse方法是 阻塞的, 只有把解析完,才会 调用reloadData
[parser parse];
//5. 刷新UI
[self.tableView reloadData];
}];
}
#pragma -mark NSXMLParser代理方法
// 开始解析
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
NSLog(@"开始解析----");
}
// 开始解析某个元素
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<nsstring nsstring=""> *)attributeDict
{
// NSLog(@"%@---%@",elementName,attributeDict);
// SAX解析, 一个一个节点 解析
if ([elementName isEqualToString:@"videos"]) {
return;
}
// 字典转模型
[self.videos addObject:[ZYVideo mj_objectWithKeyValues:attributeDict]];
}
// 某个元素解析完毕
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@"%@",elementName);
}
// 结束解析
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"结束解析----");
}
#pragma -mark tableView数据源方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.videos.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//1. 设置重用标识
static NSString *ID = @"video";
//2. 在缓存池中复用cell(如果没有会自动创建)
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//3. 设置数据
// NSDictionary *dict = self.videos[indexPath.row];
ZYVideo *video = self.videos[indexPath.row];
cell.textLabel.text = video.name;
cell.detailTextLabel.text = [NSString stringWithFormat:@"播放时间:%@",video.length];
// 使用SDWebImage设置网络中下载的图片
// 拼接图片的url
// NSString *baseUrlStr = @"https://120.25.226.186:32812";
NSString *urlStr = [baseUrlStr stringByAppendingPathComponent:video.image];
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:urlStr] placeholderImage:[UIImage imageNamed:@"qq"]];
// NSLog(@"----%@",video.ID);
return cell;
}
#pragma -mark tableView的代理方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//1. 拿到数据
// NSDictionary *dict = self.videos[indexPath.row];
ZYVideo *video = self.videos[indexPath.row];
<c
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号