- (IBAction)parserButton:(id)sender {
parserXML *parser =[[parserXML alloc] init];
[parser startParser];
//遍歷學生的姓名
for (Student *stu in parser.stuArr) {
NSLog(@%@,stu.name);
}
}
- (IBAction)domButton:(id)sender {
NSMutableArray *stuArr =[DOMXML DOMStart];
for (Student *stu in stuArr) {
NSLog(@%@,stu.name);
}
}
- (IBAction)jsonButton:(id)sender {
//對本地數據進行解析
NSString *path=[[NSBundle mainBundle] pathForResource:@movielist ofType:@txt];
NSData *data =[NSData dataWithContentsOfFile:path];
//第二個參數,指定一個可變的容器來接收解析之後的數據
NSMutableDictionary *dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSMutableArray *movieArr =[NSMutableArray array];
for (NSMutableDictionary *temp in dic[@result]) {
Movie *movie =[[Movie alloc] init];
[movie setValuesForKeysWithDictionary:temp];
[movieArr addObject:movie];
[movie release];
}
}
parserXML.h
#import
#import Student.h
@interface parserXML : NSObject
//用一條屬性,數組,來裝所有解析好的model對象
@property(nonatomic,retain)NSMutableArray *stuArr;
//用來臨時保存節點內容的字符串
@property(nonatomic,retain)NSString *tempStr;
//給一個開始解析的方法
-(void)startParser;
@end
parserXML.m
//
// parserXML.m
// UI13_數據解析XML_,JSON
//
// Created by dllo on 15/8/14.
// Copyright (c) 2015年 zhozhicheng. All rights reserved.
//
#import parserXML.h
@implementation parserXML
-(void)startParser
{
//根據文件名和類型,獲取文件所在路徑
NSString *path = [[NSBundle mainBundle] pathForResource:@Student ofType:@xml];
//把路徑文件內容轉換成NSData對象保存
NSData *data = [NSData dataWithContentsOfFile:path];
// 創建一個xml的解析工具
NSXMLParser *parser =[[NSXMLParser alloc] initWithData:data];
//需要設置解析工具的代理人
parser.delegate =self;
//開始解析
[parser parse];
}
#pragma mark 開始執行協議方法
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
//這個方法只要一碰到節點就會自動走這個方法
if ([elementName isEqualToString:@Student]) {
//當碰到根節點Student,需要對數組進行初始化
self.stuArr =[NSMutableArray array];
}else if ([elementName isEqualToString:@student ]){
//碰到student,意味著這是一個新的對象,需要創建一個對象來接收數據,並且放到學生數組中
Student *stu=[[Student alloc] init];
[self.stuArr addObject:stu];
[stu release];
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
// 找到節點內容的時候需要調用,需要用一個屬性來保存對應節點的內容string
// 保存節點內容
self.tempStr = string;
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
//只要到節點結束就會走這個方法
//沒有操作完的對象在數組的最後一位
Student *stu = [self.stuArr lastObject];
// if ([elementName isEqualToString:@name]) {
// stu.name =self.tempStr;
// }
//通過KVC進行賦值
[stu setValue:self.tempStr forKey:elementName];
}
@end