iOS开发笔记23-解析XML JSON

XML示例

<students>

<student>

<name>kellen</name>

<pass>111111</pass>

</student>

<student>

<name>wch</name>

<pass>222222</pass>

</student>

</students>

有开始就要有结束

首先新建项目

先在网上得到数据

用同步方法得到数据

- (void)viewDidLoad {

[super viewDidLoad];

/**

*先在网上得到数据

**/

NSString *strUrl = @"http://localhost/stuxml.xml";

NSURL *url = [NSURL URLWithString:strUrl];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

NSURLResponse *response = nil;

NSError *error = nil;

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

if (!error) {

NSLog(@"读到数据了,data = %@",data);

/**

*解析得到的数据

**/

}else{

NSLog(@"%@",error.localizedDescription);

}

}

/**

*解析得到的数据(XML)

**/

//1,创建xml的解析对象

NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];

//2,代理执行当前类之中的方法

parser.delegate = self;

//3,解析开始

[parser parse];

解析结果

首先是这两个代理方法

-(void)parserDidStartDocument:(NSXMLParser *)parser

{

NSLog(@"开始解析");

}

-(void)parserDidEndDocument:(NSXMLParser *)parser

{

NSLog(@"结束解析");

}

然后解析节点

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict{

NSLog(@"解析一个节点开始");

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName

{

NSLog(@"解析一个节点结束");

}

最后读到值

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

NSLog(@"读到的值 ,放在str里面 str = %@",string);

}

二,几个代理方法的调用具体分析

首先是开始解析

-(void)parserDidStartDocument:(NSXMLParser *)parser

{

NSLog(@"开始解析");

/**

*解析开始,需要对最外层的所有学生分配内存空间

**/

self.allStu = [[NSMutableArray alloc]init];

}

然后读节点

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict{

NSLog(@"解析一个节点开始,elementname = %@",elementName);

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName

{

NSLog(@"解析一个节点结束,elementname = %@",elementName);

}

在读节点的时候碰到value就读出来

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

NSLog(@"读到的值 ,放在str里面 str = %@",string);

}

最后结束解析

-(void)parserDidEndDocument:(NSXMLParser *)parser

{

NSLog(@"结束解析");

/**

*得到所有的学生

**/

for (int i =0; i<self.allStu.count; i++) {

NSLog(@"stu = %@",self.allStu[i]);

}

}

输出结果

三,赋值

创建一个类

#import <Foundation/Foundation.h>

@interface Stu : NSObject

@property (nonatomic,copy)NSString *name;

@property (nonatomic,copy)NSString *pass;

@end

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

时间: 2024-10-25 09:50:40

iOS开发笔记23-解析XML JSON的相关文章

iOS开发笔记3:XML/JSON数据解析

这篇主要总结在iOS开发中XML/JSON数据解析过程用到的方法.XML数据解析主要使用SAX方式的NSXMLParser以及DOM方式的GDataXML,JSON数据解析主要使用NSJSONSerialization. 1.XML解析之NSXMLParser NSXMLParser是iOS原生的XML解析方式,采用SAX方式进行解析,特点是解析的时候从根元素开始,按顺序依次对每一个元素进行解析. 以下图所示XML文档为例进行解析 (1)首先是实例化一个NSXMLParser,设置代理监听解析过

iOS中的数据解析(XML,JSON),SAX解析,DOM解析

第三方 SAT解析 #import "SAXTableViewController.h" #import "Student.h" @interface SAXTableViewController ()<NSXMLParserDelegate> @property (nonatomic, retain) NSMutableArray *dataSourse; // 存储学生对象 @property (nonatomic, retain) Student

IOS开发笔记-百度地图(第三方库)

最近做了百度地图,在导入SDK后遇到了一些问题 编译错误: linker command failed with exit code 1 (use -v to see invocation) 想了很多办法,查了很多资料,最后终于解决. 可能原因: 1. 有重复的.m文件,或者未导入 解决办法:有重复的删除即可 在工作左边导航栏Target-->Build Phases-->compile Sources中,第三库库的所有.m文件都添加到里面 2.Valid Architectures 的值 在

ios开发笔记----exc_bad_access(code=1, address=0x789870)野指针错误,假死debug状态

错误原因: exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后.再去通过该对象去调用其它的方法就会出现野指针错误. 例如: Person *jerry = [[Person alloc]init];  //  retainCount引用计数为1 [jerry eat];  //  调用吃的方法 [jerry release];  //  释放jerry这个对象到 retain

iOS开发笔记-两种单例模式的写法

iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" static ServiceManager *defaultManager; @implementation ServiceManager +(ServiceManager *)defaultManager{ if(!defaultManager) defaultManager=[[self allocWith

IOS中使用TBXML解析XML

IOS SDK自带的NSXML框架是采用SAX模式解析的,是基于事件驱动型的,主要解析工作在NSXMLParseDelegate中完成,解析过程中遇到开始标签.结束标签.文档开始.文档结束和字符串时触发Delegate中的方法完成解析,这种方式使用起来还是比较麻烦的.在实际工作中,我们可以选用一个比较简单易用的第三方框架TBXML,其下载地址为:https://github.com/71squared/tbxml 下载完成解压后,我们只需要将TBXML-Headers和TBXML-Code文件夹

iOS中解析 XML / JSON

JSON数据格式 1. 概述: JSON (JavaScript Object Notation) 是?一种轻量级的数据交换格式 基于?文本格式,易于?人阅读和编写,同时也易于机器解析和?生成. 2. JSON 数据的书写格式是:名称/值 • 名称写在前?面(在双引号中) • 值对写在后?面 • 中间?用冒号隔开 3. JSON 值?支持类型 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true 或 false) 数组(在中括号中) 对象(在花括号中) null JSON格式?一:最外层

iOS开发-使用NSJSONSerialization解析JSON数据

1.JSON数据结构和解析 1.1JSON数据结构 JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更快,更易解析. JSON 值可以是: 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true 或 false) 数组(在方括号中) 对象(在花括号中) null JSON 对象在花括号中书写: 对象可以包含多个名称/值对:名称和值中间使用“:”隔开,类似O

iOS开发笔记4:HTTP网络通信及网络编程

这一篇主要总结iOS开发中进行HTTP通信及数据上传下载用到的方法.网络编程中常用的有第三方类库AFNetworking或者iOS7开始新推出的NSURLSession,还有NSURLSession的前任NSURLConnection.一般情况下,使用AFNetworking即可满足绝大多数要求,并且更简洁高效. 1.HTTP协议之POST与GET 访问网络数据大部分都要用到HTTP协议,通过HTTP协议向服务器请求数据,再通过HTTP协议获得服务器的响应数据,常见的操作主要是POST与GET,