对JSON习以为常之后,使用XML多少有点不习惯。其实二者差不多。这里讲述一下iOS自带的NSXMLParserDelegate的使用。

1.头文件中声名协议<NSXMLParserDelegate>,定义两个方法:-(void)postRequest 和 -(void)startParser:(NSData*)_data

2.源文件中实现,代码如下:

[objc] view plaincopyprint?
  1. -(void)postRequest
  2. {
  3. //prepar request
  4. NSString *urlString = [NSString stringWithFormat:@"http://122.113.26.11/golive/api/loadRegionList.do"];
  5. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
  6. [request setURL:[NSURL URLWithString:urlString]];
  7. [request setHTTPMethod:@"POST"];
  8. //set headers 设置contentType和HTTPHeaderField
  9. NSString *contentType = [NSString stringWithFormat:@"text/xml"];
  10. [request addValue:contentType forHTTPHeaderField: @"Content-Type"];
  11. //create the body 在此处拼接XML字段,将每段尖括号的内容拆开拼接起来
  12. NSMutableData *postBody = [NSMutableData data];
  13. //    [postBody appendData:[[NSString stringWithFormat:@"<xml>"] dataUsingEncoding:NSUTF8StringEncoding]];
  14. [postBody appendData:[[NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"] dataUsingEncoding:NSUTF8StringEncoding]];
  15. [postBody appendData:[[NSString stringWithFormat:@"<request website=\"http://XXXXXXXXXXXXXX\">"] dataUsingEncoding:NSUTF8StringEncoding]];
  16. [postBody appendData:[[NSString stringWithFormat:@"<device devmodel=\"\" dnum=\"\" didtoken=\"\" dver=\"\"/>"] dataUsingEncoding:NSUTF8StringEncoding]];
  17. [postBody appendData:[[NSString stringWithFormat:@"<live mac=\"XXXXX\" deviceid=\"\" livetoken=\"\" livever=\"\"/>"] dataUsingEncoding:NSUTF8StringEncoding]];
  18. [postBody appendData:[[NSString stringWithFormat:@"</parameter>"] dataUsingEncoding:NSUTF8StringEncoding]];
  19. [postBody appendData:[[NSString stringWithFormat:@"</request>"] dataUsingEncoding:NSUTF8StringEncoding]];
  20. //post
  21. [request setHTTPBody:postBody];
  22. //get response
  23. NSHTTPURLResponse* urlResponse = nil;
  24. NSError *error = [[NSError alloc] init];
  25. self.responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
  26. NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
  27. NSLog(@"regionResponse Code: %ld", (long)[urlResponse statusCode]);
  28. if ([urlResponse statusCode] >= 200 && [urlResponse statusCode] < 300) {
  29. NSLog(@"regionResponse: %@", result);
  30. //这里获取到服务器返回的内容
  31. }
  32. NSString* aStr;
  33. aStr = [[NSString alloc] initWithData:postBody encoding:NSASCIIStringEncoding];
  34. NSLog(@"reg==========%@",aStr);
  35. }
  36. //自定义一个 PraxMovie 方法,参数时NSDate型的数据,用来传递接受到的数据
  37. - (void)startParser:(NSData*)data
  38. {
  39. //NSXMLParser解析xml格式的数据,在这里初始化,并赋值
  40. NSXMLParser* parser = [[NSXMLParser alloc]initWithData:data];
  41. parser.delegate = self;
  42. [parser parse];
  43. NSLog(@"解析完成。。。");
  44. }
  45. //文档出错的时候触发
  46. - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
  47. {
  48. NSLog(@"%@",parseError);
  49. }
  50. //遇到一个开始标签时候触发
  51. - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
  52. namespaceURI:(NSString *)namespaceURI
  53. qualifiedName:(NSString *)qualifiedName
  54. attributes:(NSDictionary *)attributeDict
  55. {
  56. self.currentTagName = elementName;
  57. //region是需要解析的内容所对应的字段
  58. if ([currentTagName isEqualToString:@"region"]) {
  59. //name和code是需要解析的内容所对应的字段
  60. [self.name addObject:[attributeDict objectForKey:@"name"]];
  61. [self.code addObject:[attributeDict objectForKey:@"code"]];
  62. [self.regionDic setObject:[attributeDict objectForKey:@"code"] forKey:[attributeDict objectForKey:@"name"]];
  63. NSLog(@"language:%@;code:%@",[attributeDict objectForKey:@"name"],[attributeDict objectForKey:@"code"]);
  64. }
  65. }
  66. //遇到结束标签时候出发
  67. - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  68. namespaceURI:(NSString *)namespaceURI
  69. qualifiedName:(NSString *)qName;
  70. {
  71. self.currentTagName = nil;
  72. }

这样就OK了,成功获取到后台数据并解析成所需要的内容。

XML请求数据和解析相关推荐

  1. ajax请求json和xml数据及对json和xml格式数据的解析

    ajax请求json和xml数据及对json和xml格式数据的解析 一.ajax请求json数据并解析 ajax的写法: json数据解析: 请求json经常出现的跨域报错: 二.ajax请求xml数 ...

  2. Swift 网络请求数据与解析

    一: Swift 网络数据请求与处理最常用第三方 又有时间出来装天才了,还是在学swift,从中又发现一些问题,这两天上网找博客看问题弄的真的心都累.博客一篇写出来,好多就直接照抄,就没有实质性的把问 ...

  3. 组装复杂json请求数据和解析复杂json数据

    在项目中有很多的接口对接的问题,于是就遇到了客户提供的各种奇葩的请求体.说一下最近遇到的一个复杂的json格式请求数据如下: {"bizData": {"userList ...

  4. android 微信支付返回XML格式数据的解析方法

    此篇主要是为了那些做微信支付需要解析XML的朋友少写代码而创建,直接用即可: 一般我们在请求网络的时候,返回的都是Json格式的字符串,对此我们已经司空见惯,并且基本都知道如何去解析:但是有些情况下, ...

  5. stm32 esp8266-01使用 get,post 请求数据以及json解析

    之前写的只是esp8266 AT指令详解说明,就写一个esp8266 get请求数据json解析.json 解析用的是Cjson,网上可以大家看一下.引用调用就行. 下面是esp8266 一些列操作, ...

  6. Android解析xml的方法,Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  7. R语言XML格式数据导入与处理

    数据解析 XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用的工具.它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强 ...

  8. HTTP协议简介_请求消息/请求数据包/请求报文_响应消息/响应数据包/响应报文

    文章目录 HTTP 介绍 请求数据包/请求消息/请求报文 请求数据包解析 响应数据包/响应消息/响应报文 HTTP 介绍 概念:Hyper Text Transfer Protocol 超文本传输协议 ...

  9. 怎么调用获取被创建的预制体_Go 语言 Web 编程系列—— 获取用户请求数据(上)...

    0.GET/POST 请求数据 在 PHP 中,可以直接通过全局变量 $_GET 和 $_POST 快速获取 GET/POST 请求数据,GET 请求数据主要是 URL 查询字符串中包含的参数,以前面 ...

最新文章

  1. 知识图谱学习笔记-图操作
  2. 我给这个Python库打101分!
  3. 【传智播客】JavaWeb程序设计任务教程 第五、六章练习答案
  4. P2354,jzoj3757-[NOI2014]随机数生成器【贪心,暴力】
  5. React开发(225):render中返回的值可以定义为一个方法
  6. CS224n研究热点5 图像对话
  7. android 脚本录制工具,[atx 系列] android 脚本录制
  8. c++ 栈中如何给string malloc空间_malloc,free,calloc,realloc函数
  9. 抖音品质建设 - iOS启动优化《原理篇》
  10. C语言习题答案【3】(仅参考)
  11. ios模拟器 安装ipa_用iOS模拟器安装App的方法
  12. 2021-07-17
  13. 千机智能孙海锋:期待与国际同行在高端制造领域同台竞技(自主可控CAM软件:UltraCAM)
  14. 《OKR工作法》学习总结
  15. 移动应用开发跨平台工具imag.js入门
  16. Excel数值函数(4):对指定条件的单元格求和
  17. POI导出EXCEL附带二维码以及条形码
  18. Python实现Catboost分类模型(CatBoostClassifier算法)项目实战
  19. Windows系统移动/复制安装(和原来的系统无丝毫差别)
  20. 【超市选址】开店选址必备手册

热门文章

  1. php setcookie使用变量,PHP setcookie() 函数
  2. vs代码补全的快捷键_一款Python编程的自动补全插件神器——kite
  3. Java中如何执行source命令,在Java中运行UNIX Source命令
  4. 怎么获取排他网关下的所有userTask?
  5. 使用 Pandas GUI 进行数据探索
  6. 杭州/北京内推 | 蚂蚁集团智能决策团队招聘运筹优化算法工程师/实习生
  7. 轻舟智航发布Driven-by-QCraft第三代自动驾驶硬件方案
  8. ACL 2020 | 基于机器阅读理解框架的命名实体识别方法
  9. 经典论文复现 | 基于深度卷积网络的图像超分辨率算法
  10. Java第三章 类和对象3.1+3.2