数据解析XML,JSON



//
//  ViewController.h
//  数据解析XML,JSON
//
//  Created by dllo on 15/8/14.
//  Copyright (c) 2015年 flg. All rights reserved.
//

#import 

@interface ViewController : UIViewController


@end

//
//  ViewController.m
//  数据解析XML,JSON
//
//  Created by dllo on 15/8/14.
//  Copyright (c) 2015年 flg. All rights reserved.
//

#import "ViewController.h"
#import "ParserXML.h"
#import "Student.h"
#import "DOMXML.h"
#import "movie.h"
@interface ViewController ()
//可视化编程
//
//  movie.h
//  数据解析XML,JSON
//
//  Created by dllo on 15/8/14.
//  Copyright (c) 2015年 flg. All rights reserved.
//

#import 

@interface movie : NSObject
@property(nonatomic,copy)NSString *movieName;
@property(nonatomic,copy)NSString *movieId;
@property(nonatomic,copy)NSString *pic_url;
@end

//
//  movie.m
// 
//  Created by dllo on 15/8/14.
//  Copyright (c) 2015年 flg. All rights reserved.
//

#import "movie.h"

@implementation movie
-(void)dealloc{
    [_movieId release];
    [_movieName release];
    [_pic_url release];
    [super dealloc];
}
- (void)setValue:(id)value forUndefinedKey:(NSString *)key{


}
@end


    
        安逸臣
        22
        
        
    
    
        宁致远
        23
        
        
    
    
        安乐颜
        22
        
        
    
    
        小雅惠子
        23
        
        
    

//
//  ParserXML.h
//  UI13_数据解析XML,JSON
//
//  Created by dllo on 15/8/14.
//  Copyright (c) 2015年 flg. All rights reserved.
//

#import 
#import "Student.h"
@interface ParserXML : NSObject
//用一条属性,数组,来装所有的解析好的model对象
@property(nonatomic,retain)NSMutableArray *stuArr;
//临时保存节点的字符串
@property(nonatomic,copy)NSString *tempStr;
//给一个开始解析的方法
- (void)startParser;
//把解析写成加号方法..
//+(NSMutableArray *)paserStart;

@end

//
//  ParserXML.m
//  UI13_数据解析XML,JSON
//
//  Created by dllo on 15/8/14.
//  Copyright (c) 2015年 flg. All rights reserved.
//

#import "ParserXML.h"
@implementation ParserXML
-(void)dealloc{
    [_stuArr release];
    [_tempStr release];
    [super dealloc];
}
//+(NSMutableArray *)paserStart{
//    NSString *path=[[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
//    NSData *data=[NSData dataWithContentsOfFile:path];
//    NSXMLParser *paser=[[NSXMLParser alloc] initWithData:data];
//    paser.delegate=self;
//    [paser release];
//
//
//
//}


- (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 *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

//
//  DOMXML.h
//  数据解析XML,JSON
//
//  Created by dllo on 15/8/14.
//  Copyright (c) 2015年 flg. All rights reserved.
//

#import 
#import "GDataXMLNode.h"
#import "Student.h"
@interface DOMXML : NSObject
+(NSMutableArray *)DOMstart;

@end

//
//  DOMXML.m
//  数据解析XML,JSON
//
//  Created by dllo on 15/8/14.
//  Copyright (c) 2015年 flg. All rights reserved.
//

#import "DOMXML.h"

@implementation DOMXML
+(NSMutableArray *)DOMstart{
//初始化一个用来装model得容器
    NSMutableArray *stuArr=[NSMutableArray array];
    NSString *path=[[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    NSData *data=[NSData dataWithContentsOfFile:path ];
    //用第三方进行数据解析
    //1.第一个参数是要解析的数据 2.没用 3.错误信息
    //错误信息一般设置成nil,但是如果出现错误,nil马上被错误内容替换
    GDataXMLDocument *document=[[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
    //获取根节点.
    GDataXMLElement *rootElement=[document rootElement];
    //找到根节点,找到里面的所有的student节点,装在一个数组里..
    NSArray *arr=[rootElement elementsForName:@"student"];
    //循环遍历所有的股和条件的节点
    for(NSInteger i=0;i

//
//  Student.h
//  数据解析XML,JSON
//
//  Created by dllo on 15/8/14.
//  Copyright (c) 2015年 flg. All rights reserved.
//

#import 

@interface Student : NSObject
@property(nonatomic,copy)NSString *sex;
@property(nonatomic,copy)NSString *hobby;
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *age;


@end

//
//  Student.m
//  数据解析XML,JSON
//
//  Created by dllo on 15/8/14.
//  Copyright (c) 2015年 flg. All rights reserved.
//

#import "Student.h"

@implementation Student
-(void)dealloc{
    [_age release];
    [_name release];
    [_hobby release];
    [_sex release];
    [super dealloc];
}
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{

}
@end

- (IBAction)parserButton:(id)sender;- (IBAction)DOMButton:(id)sender;- (IBAction)jsonButton:(id)sender;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}- (IBAction)parserButton:(id)sender { ParserXML *parser=[[ParserXML alloc] init]; [parser startParser]; //遍历学生的姓名 for (Student *stu in parser.stuArr) { NSLog(@"%@",stu.name); } [parser release];}- (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 *arr=dic[@"result"];// for (NSMutableDictionary *dic1 in arr) {// NSLog(@"%@",dic1[@"movieName"]);// } NSMutableArray *movieArr=[NSMutableArray array]; for (NSMutableDictionary *dic1 in dic[@"result"]) { movie *movie1=[[movie alloc] init]; [movie1 setValuesForKeysWithDictionary:dic1]; [movieArr addObject:movie1]; [movie1 release]; NSLog(@"%@",movie1.movieName); }}@end
 
  

你可能感兴趣的:(数据解析XML,JSON)