XML.JSON数据结构解析
来源:互联网 发布:python中文手册 编辑:程序博客网 时间:2024/05/19 15:44
一. XML解析
1. SAX 解析: Simple API for XML 利用代理的三个方法来实现逐行解析
创建:一个类 SAXXMLPaser
SAXXMLPaser.h
//优点:数据损坏的时候可以读取未损坏之前的数据
//缺点:数据写错的时候就会直接结束 不继续解析
@interface SAXXMLPaser : NSObject<NSXMLParserDelegate>//xml SAX解析的代理协议
@property (nonatomic,retain)NSString * currentString;//储存每个叶子节点的字符串
@property (nonatomic,retain)NSMutableArray * dataArr;//存储所有的学生对象
//开始解析
- (void)startPaser;
SAXXMLPaser.m
- (instancetype)init
{
self = [superinit];
if (self) {
self.dataArr = [NSMutableArrayarray];
}
return self;
}
- (void)dealloc
{
[self.dataArrrelease];
[self.currentStringrelease];
[super dealloc];
}
- (void)startPaser
{
//1.获得要解析的数据
NSString * xmlPath = [[NSBundlemainBundle] pathForResource:@"Student"ofType:@"XML"];//文件途径
NSData * data = [NSDatadataWithContentsOfFile:xmlPath];
//检验是否成功转换成字符串
NSString * str = [[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
//xml SAX解析使用的类
NSXMLParser * xmlPaser = [[NSXMLParseralloc] initWithData:data];
//1.设置代理
xmlPaser.delegate = self;
//2.开始解析
[xmlPaser parse];
}
#warning 当他遇到前面的节点 节点头
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementNamenamespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSLog(@"%@",elementName);
//通过判断节点名 student来创建学生
if ([elementName isEqualToString:@"student"]) {
Student * student = [[Studentalloc] init];
//将对象加入到数组中
[self.dataArraddObject:student];
[student release];
}
}
#warning 遇到里面的内容的时候会走这个方法 节点内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSLog(@"%@",string);
//存储当前的字符串
self.currentString = string;
}
#warning 当遇到后面那个节点的时候调用方法
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementNamenamespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName
{
Student * student = [self.dataArrlastObject];
//将字符串
if ([elementName isEqualToString:@"name"]) {
student.name = self.currentString;
}
else if ([elementName isEqualToString:@"sex"]) {
student.sex = self.currentString;
}
else if([elementName isEqualToString:@"number"]) {
student.number = [self.currentStringintegerValue];
}
NSLog(@"%@",elementName);
}
2. DOMXML解析 节点状解析
(1)首先需要使用到第三方的类GDataXMLNode.h GDataXMLNode.m
// libxml includes require that the target Header SearchPaths contain
//
// /usr/include/libxml2
//
// and Other Linker Flags contain
//
// -lxml2
-1.根据提示搜索Header Search Paths 添加进去 /usr/include/libxml2
-2.根据提示搜索Other Linker Flags 添加进去 -lxml2
(2)创建一个类:DOMXMLPaser
DOMXMLPaser.h
- (void)startPaser;
@property (nonatomic,retain)NSMutableArray * dataArr;
DOMXMLPaser.m
- (instancetype)init
{
self = [superinit];
if (self) {
self.dataArr = [NSMutableArrayarray];
}
return self;
}
- (void)dealloc
{
[self.dataArrrelease];
[super dealloc];
}
- (void)startPaser
{
//1.获取数据
NSString * domPath = [[NSBundlemainBundle] pathForResource:@"Student"ofType:@"XML"];
NSData * data = [NSDatadataWithContentsOfFile:domPath];
NSString * str = [[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
//2.解析数据
NSError * error = nil;//创建一个错误指针
GDataXMLDocument * document = [[GDataXMLDocumentalloc] initWithData:dataoptions:GDataXMLDocumentKinderror:&error];
if (error != nil) {
NSLog(@"错误信息:%@",error);
}
//解析1.获得结构的根节点
GDataXMLElement * rootElement = [documentrootElement];
//解析2.获得根节点的子节点
//根据节点名字获得
NSArray * arr = [rootElementelementsForName:@"student"];
//解析3.对数组进行遍历
for (GDataXMLElement * nodein arr) {
//对子节点node的子节点name解析
NSArray * nameNodes = [nodeelementsForName:@"name"];
GDataXMLElement * nameNode = [nameNodeslastObject];
//将节点转变为字符串(这个类自己带的)
NSString * name = [nameNodestringValue];
NSArray * sexNodes = [nodeelementsForName:@"sex"];
GDataXMLElement * sexNode = [sexNodeslastObject];
NSString * sex = [sexNodestringValue];
NSArray * numberNodes = [nodeelementsForName:@"number"];
GDataXMLElement * numberNode = [numberNodeslastObject];
NSInteger number = [[numberNodestringValue] integerValue];
NSLog(@"name : %@ sex:%@,number : %d",name,sex,number);
}
}
二.JSON解析 不需要创建一个类
//1.获取文件 参数1:文件名 参数2:文件类型
NSString * jsonPath = [[NSBundlemainBundle] pathForResource:@"JSON"ofType:@"txt"];
NSData * data = [NSDatadataWithContentsOfFile:jsonPath];
NSString * str = [[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
//2.解析
NSError * error = nil;
NSMutableArray * arr = [NSJSONSerializationJSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
//将字典或者字符串转换为JSON类型的
// NSJSONSerializationdataWithJSONObject:<#(id)#> options:<#(NSJSONWritingOptions)#>error:<#(NSError **)#>
NSLog(@"%@",arr);
for (NSMutableDictionary * dic in arr) {
Student * student = [[Studentalloc] init];
student.name = [dic objectForKey:@"name"];
student.sex = [dic objectForKey:@"sex"];
student.number = [[dicobjectForKey:@"number"]intValue];
NSLog(@"%@ %@ %d",student.name,student.sex,student.number);
}
- XML.JSON数据结构解析
- XML、JSON数据结构解析
- XML,JSON数据结构解析
- UIday1502:XML 、JSON 数据结构解析
- [TwistedFate]XML JSON数据结构解析
- UI XML,JSON 数据结构解析
- 第十五讲:XML、JSON数据结构解析
- iOS之JSON,XML数据结构解析
- UI课程15 XML、JSON数据结构解析
- iOS编程------XML、JSON数据结构解析
- UI第十五天:XML、JSON数据结构解析
- UI基础-XML、JSON 数据结构解析
- UI day 14 XML JSON数据结构解析
- JSON解析,XML解析
- JSON解析、XML解析
- XML解析 JSON解析
- XML解析、Json解析
- JSON解析/XML解析
- (收集整理)MySQL相关使用-(cmd操作, c++中连接MySQL)
- ubuntu下,thinkpad触摸板关闭方法
- 关于vi不正常退出产生的swp文件
- crm使用rest端点的odata系统查询选项
- Design Pattern Memo 备忘录设计模式
- XML.JSON数据结构解析
- 创建交换分区
- 7-2用rational结构体来完成分子分母的格式进行计算
- 阶乘
- 博客浏览:Quartz 时间配置详解
- 从客户角度来说
- 服务设计是一门帮助开发和提供优秀服务的设计专长
- static 变量
- Linux日志分析的实战专题