IOS开发入门之iOS网络开发教程之XML解析
凌雪 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>

    &nbsp;</video>

没有内容的元素简写:

<video>

    一个元素可以嵌套若干个子元素(不能出现交叉嵌套)   <videos>

    <video>

        <name>小黄人   第01部</name> <length>30</length></video>

    </videos>   规范的XML文档最多只有1个根元素,其他元素都是根元素的子孙元素</video>

   

 

属性   ( Attribute )


   

<video length="30" name="小黄人 第01部">

    video元素拥有name和length两个属性 属性值必须用   双引号&quot;&quot; 或者 单引号&#39;&#39; 括住   实际上,属性表示的信息也可以用子元素来表示,比如

    <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
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved