#import "ViewController.h"
#import "ParserTool.h"
#import "Student.h"
#import "DomTool.h"
@interface ViewController ()
- (IBAction)parserAction:(id)sender;
- (IBAction)domAction:(id)sender;
- (IBAction)jsonAction:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (IBAction)parserAction:(id)sender {
NSMutableArray *arr = [DomTool startDomTool];
for (Student *stu in arr) {
NSLog(@"%@", stu.name);
}
}
- (IBAction)domAction:(id)sender {
DomTool *tool = [[DomTool alloc] init];
[tool startDom];
for (Student *stu in tool.stuArr) {
NSLog(@"%@", stu.name);
}
}
- (IBAction)jsonAction:(id)sender {
NSString *path = [[NSBundle mainBundle] pathForResource:@"movielist" ofType:@"txt"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@", dic);
}
ParserTool.h
#import <Foundation/Foundation.h>
#import "Student.h"
@interface ParserTool : NSObject<NSXMLParserDelegate> // 这个是系统提供的xml的解析方法,通过代理方法完成解析.
@property(nonatomic, retain)NSMutableArray *strArr;
@property(nonatomic, copy)NSString *tempStr;
- (void)startParser;
@end
ParserTool.m
#import "ParserTool.h"
@implementation ParserTool
- (void)startParser {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
[parser release];
}
#pragma mark 碰到开始的节点就会走这个方法.
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
NSLog(@"%@",elementName);
if ([elementName isEqualToString:@"Student"]) {
self.strArr = [NSMutableArray array];
} else if ([elementName isEqualToString:@"student"]) {
Student *stu = [[Student alloc] init];
[self.strArr addObject:stu];
[stu release];
}
}
#pragma mark 找到节点里的内容.
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
self.tempStr = string;
}
#pragma mark 当节点结束的时候会执行这个方法
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
Student *student = [self.strArr lastObject];
[student setValue:self.tempStr forKey:elementName];
}
@end
Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property(nonatomic, copy)NSString *name;
@property(nonatomic, copy)NSString *sex;
@property(nonatomic, copy)NSString *age;
@property(nonatomic, copy)NSString *phone;
@end
Student.m
#import "Student.h"
@implementation Student
- (void)dealloc
{
[_name release];
[_sex release];
[_age release];
[_phone release];
[super dealloc];
}
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
}
@end
DomTool.h
#import <Foundation/Foundation.h>
#import "GDataXMLNode.h"
#import "Student.h"
@interface DomTool : NSObject
@property(nonatomic, retain)NSMutableArray *stuArr;
- (void)startDom;
+ (NSMutableArray *)startDomTool;
@end
DomTool.m
#import "DomTool.h"
@implementation DomTool
- (void)startDom {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
NSData *data = [NSData dataWithContentsOfFile:path];
self.stuArr = [NSMutableArray array];
NSError *error = nil;
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:&error];
GDataXMLElement *rootElement = [document rootElement];
NSArray *arr = [rootElement elementsForName:@"student"];
for (NSInteger i = 0; i < arr.count; i++) {
GDataXMLElement *stu = arr[i];
Student *tempStu = [[Student alloc] init];
[self.stuArr addObject:tempStu];
[tempStu release];
GDataXMLElement *name = [[stu elementsForName:@"name"] lastObject];
NSString *stuName = [name stringValue];
tempStu.name = stuName;
GDataXMLElement *age = [[stu elementsForName:@"age"] lastObject];
NSString *stuAge = [age stringValue];
tempStu.age = stuAge;
}
}
+ (NSMutableArray *)startDomTool {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSMutableArray *stuArr = [NSMutableArray array];
NSError *error = nil;
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:&error];
GDataXMLElement *rootElement = [document rootElement];
NSArray *arr = [rootElement elementsForName:@"student"];
for (NSInteger i = 0; i < arr.count; i++) {
GDataXMLElement *stu = arr[i];
Student *tempStu = [[Student alloc] init];
[stuArr addObject:tempStu];
[tempStu release];
GDataXMLElement *name = [[stu elementsForName:@"name"] lastObject];
NSString *stuName = [name stringValue];
tempStu.name = stuName;
GDataXMLElement *age = [[stu elementsForName:@"age"] lastObject];
NSString *stuAge = [age stringValue];
tempStu.age = stuAge;
}
return stuArr;
}