ios网络学习------7 xml格式数据的请求处理

用NSXMLParser解析XML文件过程:

1 创建NSXMLParser实例,并传入从服务器接收XML数据。

2 定义解析器代理

3 解析器解析。

4 通过解析代理方法完成XML数据的解析。

#pragma mark 加载xml
- (void)loadXML
{
    //获取网络数据。
    NSLog(@"load xml");
    //从web服务器加载数据
    NSString *str = @"http://www.baidu.com?format=xml";  //这里是乱写的
    //1简历NSURL
    NSURL *url = [NSURL URLWithString:str];
    //2建立NSURLRequest
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f];
    //3建立NSURLConnect的同步方法加载数据
    NSURLResponse *response = nil;
    NSError *error = nil;
    //同步加载数据
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    //1实例化解析器,传入要解析的数据
    NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
    //2 设置代理
    [parser setDelegate:self];
    //3解析器解析,这个方法会调用代理里面的方法。
    [parser parse];
}
/*
 xml解析思路;
  0 数据初始化工作,实例化dataList和第三步需要使用的全局字符串。
  1 如果在第二个方法中,elementName  == video .会在attributeDict中包含videoId
  2 如果在第二个方法中, elementName == video。。需要实例化一个全局的video属性,记录2 3 4步骤中解析当前视频信息对象
  3 其它的属性会依次执行2 ,3 ,4 方法,同时在第三个方法中可能多次被调用。
  4 在第三个方法中,需要拼接字符串  需要定义一个全局的属性记录中间过程
  5 在第四个方法中,可以通过第三个方法拼接出的字符串获得elementName对应的内容。
    可以设置全局video对象的elementName对应的数值。
  6 在第四个方法中,如果elementName  == video,则将该方法插入datalist中。

 需要的准备工作:
  1 全局的字符串,记录每一个元素的完整内容。
  2 全局的video对象,记录当前正在解析的元素。
 */
#pragma mark - XML解析器代理方法
//1 解析文档
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    NSLog(@"开始解析");
    //懒加载实例化数据
    if (self.dataList == nil) {
        self.dataList = [NSMutableArray array];
    }else{
        [self.dataList removeAllObjects];
    }

    //中间字符串
    if(self.elementString == nil)
    {
        self.elementString = [NSMutableString string];
    }else{
        //self.elementString = @"";
        [self.elementString setString:@""];
    }
}
//在整个XML文件解析完成之前, 2,3,4会被重复调用
//2开始解析一个元素,新的节点开始了。
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    NSLog(@"开始解析元素 %@ %@", elementName, attributeDict);
    if ([elementName isEqualToString:@"video"]) {
        //1 实例化currentvideo
        self.currentVideo = [[Video alloc]init];
        //2 保存videoid
        self.currentVideo.videoId = [attributeDict[@"videoId"]integerValue];
    }
    //需要清空中转字符串
    [self.elementString setString:@""];
}
//3接收元素的数据(发现字符,这个方法会因为元素内容过大,此方法会被重复调用,需要拼接数据)
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    NSLog(@"发现字符 %@", string);
    [self.elementString appendString:string];
}
//4结束解析一个元素
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    NSLog(@"完成解析元素 %@", elementName);
    //获得第三步拼接出来的字符串。
    NSString *result = [NSString stringWithString:self.elementString];
    if ([elementName isEqualToString:@"name"]) {
        self.currentVideo.name = result;
    }else if ([elementName isEqualToString:@"length"]){
        self.currentVideo.length = [result integerValue];
    }else if ([elementName isEqualToString:@"videoURL"]){
        self.currentVideo.videoId = [result integerValue];
    }else if ([elementName isEqualToString:@"imageURL"]){
        self.currentVideo.imageURL = result;
    }else if ([elementName isEqualToString:@"desc"]){
        self.currentVideo.desc = result;
    }else if ([elementName isEqualToString:@"teacher"]){
        self.currentVideo.teacher = result;
    }else if ([elementName isEqualToString:@"video"]){
        [self.dataList addObject:self.currentVideo];
    }
}
//5解析文档结束
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"文档结束 %@", self.dataList);
    //清空临时数据
    self.currentVideo = nil;
    [self.elementString setString:@""];

    //uitableview刷新数据
    [self.tableView reloadData];
}
//6解析出错
- (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validationError
{
    NSLog(@"解析出现错误");
    //清空临时数据
    self.currentVideo = nil;
    [self.elementString setString:@""];
    //清空临时数组
    [self.dataList removeAllObjects];
}

ios网络学习------7 xml格式数据的请求处理

时间: 2024-08-08 23:23:16

ios网络学习------7 xml格式数据的请求处理的相关文章

ios网络学习------8 xml格式数据的请求处理 用代码块封装

#pragma mark 加载xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从web服务器加载数据 NSString *str = @"http://www.baidu.com?format=xml"; //这里是乱写的 //1简历NSURL NSURL *url = [NSURL URLWithString:str]; //2建立NSURLRequest NSURLRequest *request =

ios网络学习------5 json格式数据的请求处理

JSON正逐步取代XML,成为网络数据的通用格式. 从ios5开始,使用NSJSONSerialization对JSON解析.还有第三方库,比如SBJson, JSONKit, TouchJson等.从性能上说,NSJSONSerizlization最好,JSONKit其次,SBJson使用较为广泛. 加载json文件: #pragma mark 加载json - (void)loadJson { NSLog(@"load json"); //从web服务器加载数据 NSString

ios网络学习------6 json格式数据的请求处理

#import "MainViewController.h" #import "Video.h" #define kBaseURL @"http://192.168.3.252/~apple" @interface MainViewController ()<UITableViewDataSource, UITableViewDelegate> @property (strong, nonatomic) NSArray *dataLi

iOS开发之解析XML格式数据

XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用Swift. 首先自己写一个简单的XML: <data> <person age="15">zhangsan</person> <person age="2">lisi</person> <person&

ios网络学习------4 UIWebView的加载本地数据的三种方式

UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIME的标识符等放入传送的数据中告诉浏览器使用那种插件读取相关文件. uiwebview加载各种本地文件(通过loadData方法): - (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; NSString *path = [[NSBund

iOS dom解析xml格式数据

问题描述:接口返回的是xml格式数据,而且节点名居然都是相同的,采用了dom解析最终解决 一.文件导入 1.下载GDataXMLNode.h 和 GDataXMLNode.m文件,导入工程(csdn文件下载链接:http://download.csdn.net/detail/wusangtongxue/9502292) 2.配置环境: (1)改成ARC环境(-fno-objc-arc): (2)找到“Paths\Header Search Paths”项,并添加“/usr/include/lib

ios网络学习------1get post异步请求

网络请求的步骤: get请求: #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,因为一般来说属性都是和界面关联的,我们可以通过参数的方式来使用属性 #pragma mark Get登录方法 - (void)loginWithGet:(NSString *)name pwd:(NSString *)pwd { //1确定地址NSURL NSString *urlString = [NSString stringWithFormat:@"www.baidu.com?user

ios网络学习------11 原生API文件上传之断点续传思路

#import "MainViewController.h" @interface MainViewController () @end @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; //下载文件 [self download]; } -(void)download { //1. NSURL NSURL *url = [NSURL URLWithString:@"ht

Android之解析XML格式数据

作用:在网络上传输数据时最常用的格式有两种,XML 和 JSON.解析XML格式数据获得与后台交互的信息. 种类: 3种:Pull 解析方式:SAX 解析方式:DOM解析方式. 1.使用Pull解析器解析XML文档Pull解析器的运行方式和SAX解析器很相似,它提供了类似的事件,比如文档开始.文档结束.开始元素和结束元素等.使用parser.next()方法可以进入下一个元素并触发相应的事件.各种事件均已数字的形式被发送,因此可以在程序中使用一个switch语句来对事件进行选择,然后进行相应的事