//
// RootViewController.m
// UI_Lesson_17
//
// Created by xalo on 15/9/24.
// Copyright All rights reserved.
//
#import "RootViewController.h"
#import "GDataXMLNode.h"
#import "JSONKit.h"
#import "SBJSON.h"
#import "CJSONDeserializer.h"
@interface RootViewController ()<NSXMLParserDelegate>//使用NSXMLParser做XML解析时是基于协议回调的形式 所以要遵循NSXMLParserDelegate协议
@end
@implementation RootViewController
- (void)viewDidLoad {
[super viewDidLoad];
//使用SDK类中的JSON解析类进行解析
//.app应用程序包mainBundle
NSString *JSONFilePath = [[NSBundle mainBundle]pathForResource:@"StudentInfo" ofType:@"json"];
NSString *JSONContent = [NSString stringWithContentsOfFile:JSONFilePath encoding:NSUTF8StringEncoding error:nil];
NSData *JSONData = [JSONContent dataUsingEncoding:NSUTF8StringEncoding];
NSArray *JSONResult = [NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableContainers error:nil];
NSLog( @"%@", JSONResult);
NSLog(@"%@", JSONFilePath);
//第三方<img src="https://img-blog.csdn.net/20151030154842253?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
//JSONKit
// NSArray *arrayJSON = [JSONContent objectFromJSONString];
NSArray *dataJSON = [JSONData objectFromJSONData];
for (int i = 0 ; i < [dataJSON count]; i ++) {
NSDictionary *item = [dataJSON objectAtIndex:i];
NSLog( @"arrayJSON %@", [item objectForKey:@"name"]);
NSLog( @"arrayJSON %@", [item objectForKey:@"age"]);
NSLog( @"arrayJSON %@", [item objectForKey:@"sex"]);
}
//SBJSON
SBJsonParser *jsonparser = [[SBJsonParser alloc]init];
NSArray *jsonarray = [jsonparser objectWithString:JSONContent];
for (int i = 0 ; i < [jsonarray count]; i ++) {
NSDictionary *item = [ jsonarray objectAtIndex:i];
NSLog( @"jsonarray %@", [item objectForKey:@"name"]);
NSLog( @"jsonarray %@", [item objectForKey:@"age"]);
NSLog( @"jsonarray %@", [item objectForKey:@"sex"]);
}
//touchJSON
NSArray *jsonArr = [[CJSONDeserializer deserializer]deserializeAsArray:JSONData error:nil];
for (NSDictionary *obj in jsonArr) {
NSLog( @"%@ %@ %@",[obj objectForKey:@"name"], [obj objectForKey: @"age"], [obj objectForKey: @"sex"]);
}
// Do any additional setup after loading the view.
NSString *XMLFilePath = [[NSBundle mainBundle]pathForResource:@"StudentInfo" ofType:@"xml"];
获取文件内容
NSString *XMLContent = [NSString stringWithContentsOfFile:XMLFilePath encoding:NSUTF8StringEncoding error:nil];
// 文件内容转化为二进制格式
NSData *XMLData = [XMLContent dataUsingEncoding:NSUTF8StringEncoding];
//DOM解析
//1.生成xml文件对象
GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:XMLData options:0 error:nil];
//2. 获取根节点对象
GDataXMLElement *rooeElement = [document rootElement];
//3.获取子节点
NSArray *subElements = [rooeElement elementsForName: @"student"];
//4.通过forin来得到每个student节点对象
for (GDataXMLElement *oneElement in subElements) {
NSString *name = [[[oneElement elementsForName: @"name"]firstObject]stringValue];
NSInteger age = [[[[oneElement elementsForName: @"age"]firstObject]stringValue ] integerValue];
NSString *sex = [[[oneElement elementsForName: @"sex"]firstObject] stringValue];
NSLog( @"name%@ age%ld sex%@", name, age, sex);
}
//5.释放document所有权
[document release];
/*
//XML SAX 工具解析 SAX:Simple API for XML。基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)逐行执行
//创建XML解析器对象
//获取文件路径
NSString *XMLFilePath = [[NSBundle mainBundle]pathForResource:@"StudentInfo" ofType:@"xml"];
获取文件内容
NSString *XMLContent = [NSString stringWithContentsOfFile:XMLFilePath encoding:NSUTF8StringEncoding error:nil];
// 文件内容转化为二进制格式
NSData *XMLData = [XMLContent dataUsingEncoding:NSUTF8StringEncoding];
// NSData *XMLData = [[NSData alloc]initWithContentsOfFile:XMLFilePath];
//创建XML解析器
NSXMLParser *XMLParser = [[NSXMLParser alloc]initWithData:XMLData];
//为解析器指定代理对象
XMLParser.delegate = self;
//给解析器对象发送parse消息 开始解析XML数据
[XMLParser parse];
[XMLParser release];
}
#pragma mark - NSXMLParser Delegate -
//协议方法 解析器开始解析
- (void)parserDidStartDocument:(NSXMLParser *)parser{
//在解析器开始解析的时候会响应此协议 来通知代理对象解析开始
NSLog( @"%s", __FUNCTION__);
}
//协议方法 解析
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{
NSLog( @"start element -> %@", elementName);//找到元素名称
// NSLog( @"namespace -> %@", namespaceURI);//命名空间标志
// NSLog( @"qualified -> %@", qName);//描述名称
// NSLog( @"attributes -> %@", attributeDict);//属性字典
NSLog( @">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
*/
}
//协议方法 完成解析
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
NSLog (@"end element -> %@", elementName);//找到结束标签
NSLog( @"--------------------------------------------");
}
//协议方法 找到对应节点值
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog( @"value - > %@", string);
NSLog( @"............................................");
}
//协议方法 解析器结束
- (void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog( @"%s" , __FUNCTION__);
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end