iOS 对于文件的解析 JSON DOM SAX

主要是对文件的三种解析方法,相关的文件已经压缩附件中

.h文件

#import <UIKit/UIKit.h>

#import "StudentModel.h"

#import "GDataXMLNode.h"

@interface RootViewController : UIViewController<NSXMLParserDelegate>

@property(nonatomic,retain)NSMutableArray *dataArray;

//存放临时变量

@property(nonatomic ,retain)NSString *tempStr;

@end

.m文件

#import "RootViewController.h"

@interface RootViewController ()

@end

@implementation RootViewController

- (void)viewDidLoad {

[super viewDidLoad];

UIButton *button1 =[UIButton buttonWithType:UIButtonTypeCustom];

[button1 setTitle:@"JSON" forState:UIControlStateNormal];

UIButton *button2 =[UIButton buttonWithType:UIButtonTypeCustom];

[button2 setTitle:@"DOM" forState:UIControlStateNormal];

UIButton *button3 =[UIButton buttonWithType:UIButtonTypeCustom];

[button3 setTitle:@"SAX" forState:UIControlStateNormal];

button1.frame =CGRectMake(10, 80, 50, 20);

button2.frame =CGRectMake(30,110, 50, 20);

button3.frame =CGRectMake( 80, 150, 50, 20);

button1.layer.borderWidth =1;

button1.layer.borderColor =[UIColor blackColor].CGColor;

button2.layer.borderWidth =1;

button2.layer.borderColor =[UIColor blackColor].CGColor;

button3.layer.borderWidth =1;

button3.layer.borderColor =[UIColor blackColor].CGColor;

[self.view addSubview:button1];

[self.view addSubview:button2];

[self.view addSubview:button3];

self.view.backgroundColor =[UIColor redColor];

[button1 addTarget:self action:@selector(change1) forControlEvents:UIControlEventTouchUpInside];

[button2 addTarget:self action:@selector(change2) forControlEvents:UIControlEventTouchUpInside];

[button3 addTarget:self action:@selector(change3) forControlEvents:UIControlEventTouchUpInside];

}

//解析json

-(void)change1

{

NSString *path=[[NSBundle mainBundle]pathForResource:@"Student" ofType:@"txt"];

//根据路径将文件转换为nsJSON

NSData *data =[NSData dataWithContentsOfFile:path];

self.dataArray =[NSMutableArray array];

//创建错误信息

NSError *error =nil;

//获取数组(里面装的字典)

NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

//遍历数组

for (NSDictionary *dic in array) {

StudentModel *stu =[StudentModel getStudentModel];

[stu setValuesForKeysWithDictionary:dic];

[self.dataArray addObject:stu];

}

//结果打印查看

StudentModel *stu1 =[self.dataArray  objectAtIndex:1];

NSLog(@"%@",stu1.name);

}

-(void)change2

{

//dom解析

//    NSString *path =[[NSBundle mainBundle]pathForResource:@"Student" ofType:@"xml"];

//    NSData *data =[NSData dataWithContentsOfFile:path];

//    self.dataArray =[NSMutableArray array];

//    //转载数据(数据全部加入内存,因此说dom解析在解析大数据时比较消耗内存)

//    //1.参数代表数据 2参数没用 3参数是错误信息

//    NSError *error =nil;

//    GDataXMLDocument *document =[[GDataXMLDocument alloc]initWithData:data options:0 error:&error];

//    //获取根节点

//    GDataXMLElement *rootElement =[document rootElement];

//    //获取所有子节点

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

//

//    //遍历

//    for (GDataXMLElement *node in array) {

//        StudentModel *stu =[StudentModel getStudentModel];

//      stu.name  = [[[node elementsForName:@"name"]lastObject]stringValue];

//        stu.sex =[[[node elementsForName:@"sex"]lastObject]stringValue];

//        stu.number =[[[[node elementsForName:@"number"]lastObject]stringValue]integerValue];

//        stu.phone =[[[[node elementsForName:@"phone"]lastObject]stringValue]integerValue];

//        [self.dataArray addObject:stu];

//

//    }

//    StudentModel *model =[self.dataArray objectAtIndex:1];

//    NSLog(@"%@",model.name);

NSString *path =[[NSBundle mainBundle]pathForResource:@"Student" ofType:@"xml"];

NSData *data =[NSData dataWithContentsOfFile:path];

self.dataArray =[NSMutableArray array];

NSError *error =nil;

GDataXMLDocument *document =[[GDataXMLDocument alloc]initWithData:data options:0 error:&error];

GDataXMLElement *rootElement =[document rootElement];

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

for (GDataXMLElement *node in array) {

StudentModel *stu =[StudentModel getStudentModel];

stu.name =[[[node elementsForName:@"name"]lastObject]stringValue];

stu.sex =[[[node elementsForName:@"sex"]lastObject]stringValue];

stu.number =[[[[node elementsForName:@"number"]lastObject]stringValue] integerValue];

stu.phone = [[[[node

elementsForName:@"phone"]lastObject]stringValue]integerValue];

[self.dataArray addObject:stu];

}

StudentModel *model =[self.dataArray objectAtIndex: 1];

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

}

-(void)change3

{

//用sax方式来解析XML文件

//获取要解析的文件路径

NSString *path =[[NSBundle mainBundle]pathForResource:@"Student" ofType:@"xml"];

//把这个文件转化为nsdata

NSData *data =[NSData dataWithContentsOfFile:path];

//创建解析类

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

//设置代理

parser.delegate =self;

//开始解析

[parser parse];

}

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

//发现节点内容

//记录节点内容

self.tempStr =string;

}

#pragma -mark SAX解析代理方法

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

{

//头节点

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

self.dataArray =[NSMutableArray array];

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

StudentModel *stu =[StudentModel getStudentModel];

[self.dataArray addObject:stu];

}

}

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

//发现尾节点

//取出stdentmodel

StudentModel *stu =[self.dataArray lastObject];

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

stu.number =[self.tempStr integerValue];

} else if ([elementName isEqualToString:@"name"]){

stu.name =self.tempStr;

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

stu.sex =self.tempStr;

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

stu.phone =[self.tempStr integerValue];

}

}

//解析完成

-(void)parserDidEndDocument:(NSXMLParser *)parser{

NSLog(@"解析完成");

StudentModel *stu =[self.dataArray objectAtIndex:1];

NSLog(@"%@",stu.name);

}

@end

时间: 2024-10-13 02:25:06

iOS 对于文件的解析 JSON DOM SAX的相关文章

UI11-数据解析:Json DOM SAX 解析

JSONKit 解析: 第三方: #import "JSONKit.h" JSON 系统解析: DOM 解析 第三方: #import "GDataXMLNode.h" GData有个方法 NSArray *arr = [root elementsForName:@"student"]; 找到所有姓名是name的学生,存放到数组中. 1.头文件搜索  ${SDK_ROOT}/usr/include/libxml2 2.导入库  XML 3.转ar

IOS中的XML解析之DOM和SAX

一.介绍 dom是w3c指定的一套规范标准.核心是按树形结构处理数据,dom解析器读入xml文件并在内存中建立一个结构一模一样的"树",这树各节点和xml各标记相应,通过操纵此"树"来处理xml中的文件.xml文件非常大时.建立的"树"也会大,所以会大量占用内存. sax解析器核心是事件处理机制.比如解析器发现一个标记的開始标记时.将所发现的数据会封装为一个标记開始事件,并把这个报告给事件处理器.事件处理器再调用方法(startElement)处

iOS学习 - 22 异步解析 JSON,使用 Model 存储,TableView 显示

Model 类: @interface ListModel : NSObject @property (nonatomic, copy)NSString *time; @property (nonatomic, copy)NSString *cname; @property (nonatomic, copy)NSString *summary; @property (nonatomic, copy)NSString *title; @property (nonatomic, copy)NSStr

解析xml:dom,sax,jdom,dom4j,推荐dom4j

1):dom解析,放在内存中占用内存比较大 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document d = db.parse("src/student.xml"); NodeList nl = d.getElementsByTagName("student"); El

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

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

DOM/SAX/PULL解析XML

1. 代码结构 InterfaceXMLParseService 解析接口, DOM/SAX/PULL分别实现这个接口 XML来源是assets目录下的persons.xml文件 2. 代码 //persons.xml <?xml version="1.0" encoding="utf-8"?> <persons> <person> <id>1</id> <name>Tom</name&g

Java学习总结(21)——XML文档解析:DOM解析,SAX解析

一.XML简介1.可扩展性标记语言(eXtensible Markup Language)2.XML用于描述数据3.应用场合:(1)持久化存储数据(2)数据交换(3)数据配置4.XML语法(1)文档类型:在编写XML文档时,需要先使用文档声明,声明XML文档的类型.最简单的声明语法:<?Xml version="1.0" ?>用encoding属性说明文档的字符编码:<?Xml version="1.0" encoding="GB2312

iOS: Crash文件解析(一)

iOS Crash文件的解析(一) 开发程序的过程中不管我们已经如何小心,总是会在不经意间遇到程序闪退.脑补一下当你在一群人面前自信的拿着你的App做功能预演的时候,流畅的操作被无情地Crash打断.联想起老罗在发布Smartisan OS的时候说了,他准备了10个手机,如果一台有问题,就换一台,如果10台后挂了他就不做手机了.好了不闲扯了,今天就跟大家一起聊聊iOSCrash文件的组成以及常用的分析工具. 有一个WWDC 2010的视频推荐大家抽空看看,视频名称“Understanding C

JavaScripts学习日记——DOM SAX JAXP DEMO4J XPath

今日关键词: XML解析器 DOM SAX JAXP DEMO4J XPath XML解析器 1.解析器概述 什么是解析器 XML是保存数据的文件,XML中保存的数据也需要被程序读取然后使用.那么程序使用什么来读取XML文件中的数据呢?XML解析器!例如.properties文件的解析器是Properties类一样! XML不只被Java语言使用,还被C++.C#.Javascript等等语言使用,所以解析XML不是一门语言的工作! DOM和SAX介绍 主流的XML解析有两种标准:DOM和SAX