UI基础整理-16

API(Application Programming Interface,应用程序编程接口)


XML:   SAX     
          Dom
JSON:  JSONSerialization
             JSONKit


在引入第三方时要注意如何使用(使用方法一般都写在下载的网页中或者下载完成后的.h/.m文件中)



容器 —>三大集合(数组,字典,集合)

引入第三方报错(第三方写在mrc的)   将其修改为arc
在Header Search中添加下方文本






修改为arc机制




//
//  ViewController.m
//  Lesson16_解析
//
//  Created by Floating_SH on 15/12/8.
//  Copyright © 2015SH. All rights reserved.
//

#import"ViewController.h"
#import
"Student.h"
#import
"GDataXMLNode.h"
#import
"JSONKit.h"
@interface ViewController ()<NSXMLParserDelegate>





/**
 * 
一个可变数组,用来存储每次解析出来的model数据
 */

@property (nonatomic,strong)NSMutableArray *dataArray;
/**
 * 
不可变字符串,用来保存当前解析到的节点名称
 */

@property (nonatomic,strong)NSString *currentElement;


@end


@implementationViewController

#pragma mark --- JSON JSONKit解析---
//JSON JSONKit解析
- (
IBAction)jsonkitParserAction:(id)sender {
   
   
//1.获取文件路径
 
  
NSString*path = [[NSBundlemainBundle]pathForResource:@"JSONDocument"ofType:@"txt"];
   
//2.创建Data对象
  
 
NSData *data = [NSData dataWithContentsOfFile:path];
   
//3.解析
   
NSArray *array = [data objectFromJSONData];

//    NSLog(@"JSON JSONKit解析结果:%@",array);
   
   
//封装model
   
self.dataArray= [[NSMutableArrayalloc]initWithCapacity:6];
   
for (NSDictionary *dict in array) {
       
Student *student = [Studentnew];
        [student
setValuesForKeysWithDictionary:dict];
        [
self.dataArrayaddObject:student];
    }
   
   
//验证model
   
for (Student *student in self.dataArray) {
       
NSLog(@"JSON JSONKit解析结果:%@",student);
    }
}

#pragma mark --- JSON Foundation解析---
//JSON Foundation解析(最好使用系统自带的解析方法)
- (
IBAction)jsonFoundationParserAction:(id)sender {
   
   
//1.获取文件路径
 
  
NSString*path = [[NSBundlemainBundle]pathForResource:@"JSONDocument"ofType:@"txt"];
   
//2.创建Data对象(Data是二进制文件,计算机能读懂)
   
NSData *data = [NSData dataWithContentsOfFile:path];
   
//3.解析(NSJSONSerialization : 专门做JSON解析的,options   NSJSONReadingAllowFragments(允许碎片):能最大限度的包容碎片)
   
NSArray *array = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragmentserror:nil];

//    NSLog(@"JSON Foundation解析结果:%@",array);

   
//封装model
   
self.dataArray= [[NSMutableArrayalloc]initWithCapacity:6];
   
for (NSDictionary *dict in array) {
       
Student *student = [Studentnew];
        [student
setValuesForKeysWithDictionary:dict];
        [
self.dataArrayaddObject:student];
    }
   
//验证model
   
for (Student *student in self.dataArray) {
       
NSLog(@"JSON Foundation解析结果:%@",student);
    }
   
}

#pragma mark --- XML - DOM解析---
//xmlDOM解析
- (
IBAction)xmlDomParserAction:(id)sender {
   
   
//1.获取文件路径
   
NSString *path = [[NSBundle mainBundle] pathForResource:@"XMLDocument"ofType:@"txt"];
   
//2.创建Data对象
   
NSData *data = [NSData dataWithContentsOfFile:path];
   
//3.创建解析对象
   
GDataXMLDocument*document = [[GDataXMLDocumentalloc]initWithData:dataoptions:0error:nil];
   
//4.获取根节点
   
GDataXMLElement*rootElement = [document rootElement];
   
   
//解析
 
  
self.dataArray= [[NSMutableArrayalloc]initWithCapacity:6];
   
//rootElement.children  根节点的子节点
   
//遍历根节点的子节点
  
 
for (GDataXMLElement *studentElement in rootElement.children) {
       
//根据子节点的个数来创建model
   
    
Student*student = [Studentnew];
       
//遍历子节点的子节点
 
      
for (GDataXMLElement *subElement in studentElement.children) {
           
//KVC赋值
            [student
setValue:subElement.stringValueforKey:subElement.name];
        }
       
//model对象添加到数组
 
       [
self.dataArrayaddObject:student];
    }
   
   
//遍历打印
 
  
for (Student *s in self.dataArray) {
       
NSLog(@"XML_DOM解析结果:%@",s);
    }
   
}





#pragma mark --- XML - SAX解析---
//xmlSax解析
- (
IBAction)xmlSaxParserAction:(id)sender {
   
//采用协议回调机制(设置代理对象)
   
   
//1.获取文件路径
   
NSString*path = [[NSBundlemainBundle]pathForResource:@"XMLDocument"ofType:@"txt"];
   
//2.创建data对象
   
NSData *data = [[NSData alloc]initWithContentsOfFile:path];
   
//3.创建解析对象
   
NSXMLParser*parser = [[NSXMLParseralloc]initWithData:data];
   
//4.设置代理
    parser.
delegate= self;
   
//5.开始解析
    [parser
parse];
   
   
}
#pragma mark -----协议回调机制解析数据步骤----
//1.开始解析文档
- (
void)parserDidStartDocument:(NSXMLParser*)parser{
   
   
//给数组开辟空间
   
self.dataArray= [[NSMutableArrayalloc]initWithCapacity:6];
   
   
}

//2.开始解析标签
- (
void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName attributes:(NSDictionary<NSString*,NSString*> *)attributeDict{
   
   
//获取当前标签名
   
self.currentElement= elementName;
   
//根据student标签来预存储model对象
   
if ([elementName isEqualToString:@"student"]) {
       
Student *student = [Studentnew];
        [
self.dataArrayaddObject:student];
    }
   
}

//3.获取标签内容(真正赋值)
- (
void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string{
   
   
//取出数组中最后一个元素进行赋值操作
   
Student *student = [self.dataArraylastObject];
    [student
setValue:stringforKey:self.currentElement];//currentElement   标签名
}


//4.结束标签解析
- (
void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName{
   
   
//0
   
self.currentElement= nil;
}


//下面两种可以不写(为了严谨还是写上)
//5.结束文档解析
- (
void)parserDidEndDocument:(NSXMLParser*)parser{
   
   
//遍历,查询解析结果
   
for (Student *student in self.dataArray) {
       
NSLog(@"XML_SAX解析结果:%@",student);
    }
}

//6.错误处理(写错时才会执行)
- (
void)parser:(NSXMLParser*)parser parseErrorOccurred:(NSError*)parseError{
   
   
NSLog(@"出错了,错误代码是%@",parseError);
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值