Xml 和Json解析

//

//  ViewController.m

//  Lesson_15_XML解析

//

//  Created by 李洪鹏 on 15/7/20.

//  Copyright (c) 2015年 李洪鹏. All rights reserved.

//

#import "ViewController.h"

#import "studentModel.h"

#import "GDataXMLNode.h"

#import "JSONKit.h"

@interface ViewController ()<NSXMLParserDelegate>

//实例变量

{

//用来记录当前操作的标签

NSString *_currentElement;

}

@property (nonatomic, strong)NSMutableArray *xmlSaxArray;

@property (nonatomic, strong)NSMutableArray *xmlDomArray;

@end

@implementation ViewController

//懒加载

//属性才能懒加载  需要重写getter方法

-(NSMutableArray *)xmlDomArray

{

if (_xmlDomArray == nil) {

_xmlDomArray = [NSMutableArray array];

}

return _xmlDomArray;

}

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

- (IBAction)XMLSAXbutton:(UIButton *)sender {

//1.拿到Xml文件的路径

NSString *path = [[NSBundle mainBundle] pathForResource:@"student.xml" ofType:nil];

//2. 根据文件路径获取文件的内容

NSData *data = [[NSData alloc] initWithContentsOfFile:path];

//3.根据data初始化一个NSXMLParser对象

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

//4.设置NSXMLParser对象的相关属性

//是否处理命名空间

[parser setShouldProcessNamespaces:NO];

//是否设置报告命名空间(前缀)

[parser setShouldReportNamespacePrefixes:NO];

//5设置代理

parser.delegate = self;

//6.开始解析了

[parser parse];

}

#pragma mark ------实现NSXMLParser的代理方法

#pragma mark ------打开文档

- (void)parserDidStartDocument:(NSXMLParser *)parser

{

//初始化数组

_xmlSaxArray = [NSMutableArray array];

}

#pragma mark------打开标签

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

{

if ([elementName isEqualToString:@"student"]) {

studentModel *model = [studentModel new];

[_xmlSaxArray addObject:model];

}

_currentElement = elementName;

}

#pragma mark ---取值

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

{

studentModel *model = self.xmlSaxArray.lastObject;

if ([_currentElement isEqualToString:@"name"]) {

model.name = string;

}else if ([_currentElement isEqualToString:@"sex"]){

model.sex = string;

}else if ([_currentElement isEqualToString:@"phone"]){

model.phoneNumber = string;

}

}

#pragma mark---- 关闭标签

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

{

_currentElement = nil;

}

#pragma mark ---- 关闭文档

- (void)parserDidEndDocument:(NSXMLParser *)parser

{

for (studentModel *model in _xmlSaxArray) {

NSLog(@"%@, %@, %@" , model.name, model.sex, model.phoneNumber);

}

}

//xml  DOM解析

- (IBAction)xmlDombutton:(UIButton *)sender {

//1.拿到数据路径

NSString *path = [[NSBundle mainBundle] pathForResource:@"student.xml" ofType:nil];

NSData *data = [NSData dataWithContentsOfFile:path];

//3 根据data初始化  GDataXMLDocument对象

GDataXMLDocument *xmlDocumeng = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];

//4. 拿到根节点

GDataXMLElement *rootElement = [xmlDocumeng rootElement];

//5. 解析开始

NSArray *studentArray = [rootElement elementsForName:@"student"];

for (GDataXMLElement *element in studentArray) {

//拿到name , sex , phone节点

GDataXMLElement *nameElement = [[element elementsForName:@"name"] firstObject];

GDataXMLElement *sexElement =[[element elementsForName:@"sex"] firstObject];

GDataXMLElement *phoneElement =[[element elementsForName:@"phone"] firstObject];

//创建模型

studentModel *model = [[studentModel alloc] init];

model.name = [nameElement stringValue];

model.sex = [sexElement stringValue];

model.phoneNumber = [phoneElement stringValue];

[self.xmlDomArray addObject:model];

}

for (studentModel *model in self.xmlDomArray) {

NSLog(@"%@, %@, %@", model.name, model.sex, model.phoneNumber);

}

//置为空

self.xmlDomArray = nil;

}

//json系统自带的解析方法

- (IBAction)jsonSystermButton:(UIButton *)sender {

NSString *path = [[NSBundle mainBundle]pathForResource:@"student.json" ofType:nil];

NSData *data = [NSData dataWithContentsOfFile:path];

//解析开始

NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];

NSLog(@"%@", array);

for (NSDictionary *dict in array) {

studentModel *model = [[studentModel alloc]init];

[model setValuesForKeysWithDictionary:dict];

NSLog(@"%@, %@, %ld", model.name, model.hobby, model.number);

}

}

//jsonkit第三方

- (IBAction)jsonKitbutton:(UIButton *)sender

{

NSString *path = [[NSBundle mainBundle]pathForResource:@"student.json" ofType:nil];

NSData *data = [NSData dataWithContentsOfFile:path];

//解析为数组

NSArray *array = [data objectFromJSONData];

for (NSDictionary *dict in array) {

studentModel *model = [[studentModel alloc] init];

[model setValuesForKeysWithDictionary:dict];

NSLog(@"%@, %@, %ld", model.name, model.hobby, model.number);

}

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

时间: 2024-10-12 16:19:38

Xml 和Json解析的相关文章

XML和JSON解析

待完善 XML和JSON解析,布布扣,bubuko.com

XML和JSON解析笔记

XML -> 1. sax  2.Dom JSON解析  在IOS5.0以后提供NSJSON  在5.0之前用SBJSON和JSONKit 本讲内容 1.解析的基本概念 2.XML数据结构 3.JSON数据结构 4.两种数据结构的优缺点 解析: 从事先规定好的格式中提取数据 解析的前提: 提前约定好格式, 数据提供方按照格式提供数据,数据获取方则按照格式获取数据 XML基本概念 可扩展标记语言 功能: 数据交换 Web服务  内容管理 XML数据结构的语法 一对尖括号代表一个节点,或者标签 只有

XML和JSON解析的区别

XML和JSon是ios解析文件的两种形式, 两种方法各有千秋. 1>. XML分为SAX和DOM两种方式 SAX是按顺序逐行读取文件, 查找到符合条件的内容时就会停止, 而DOM是讲内容一次性全部读取到内存中建立一个树状结构, 所以DOM不适合读取大型文件. DOM的弱点就是SAX的优点.SAX不必将所有内容添加到内存中, 但是他对文件按顺序读取一遍, 所以就导致了他不能对文件随意读取和修改,而DOM的树状结构可以对文件随意读取和修改. SAX DOM 按顺序(逐行)读取文件        

使用原生JS发送AJAX请求(XML,JSON解析)

mybutton.addEventListener('click', (e) => { let request = new XMLHttpRequest() request.onreadystatechange = () => { if(request.readyState === 4) { console.log('请求完毕') if(request.status >= 200 & request.status <= 300) { console.log('请求成功')

Demo XML 、 JSON 解析 AND 网络HTTP请求

有道云笔记分享:http://note.youdao.com/share/?id=7950b949a5017a698a9ecc95bc250ec5&type=note 后台服务端:C#.服务器搭建+公网发布. 前端Cocos2d-x(C++)可交叉编译到 应用+游戏开发 coder:倪新生 Date:2015-07-30 Email:[email protected]

两种常用的数据交换格式:XML和JSON

不同编程语言之间的数据传输,需要一种通用的数据交换格式,它需要简洁.易于数据储存.快速读取,且独立于各种编程语言.我们往往传输的是文本文件,比如我们都知道的csv(comma seperated values)格式. 而在互联网上,传输数据往往有很多层次的结构,并非矩阵形态(m×n)那么简单.常见的有xml.json.yaml等等.其中,yaml是"yaml ain't markup language"的递归缩写,即各单词首字母组合恰为第一个词:而yaml也可理解成yet anothe

多线程与网络之JSON和XML数据的解析

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

第十五讲.数据解析(XML与JSON两种数据解析)

一.XML数据解析 1.SAX:Simple API for XML.基于事件驱动的解析方式,逐行解析数据.(采用协议回调机制) NSXMLParser的解析方法: 1 #import "ViewController.h" 2 #import "Model.h" 3 4 @interface ViewController ()<NSXMLParserDelegate> 5 6 @property(nonatomic,strong)UITableView

AFNetWorking 简单介(XML,JSON解析和判断网络状态

//AFNetWorking 当下最流行的数据请求方法 里面不仅包含数据请求还包含数据解析 //包含的数据请求就是对系统类NSURLConnection的封装 //数据解析(NSJSONSerialization.XMLParser) //AFNetworking 下至兼容ios6.0 以及block语法 arc //通过AFNetWorking请求json数据 并解析 //<1>创建http请求操作管理者对象 AFHTTPRequestOperationManager * manager =