iOS 對於檔案的解析 JSON DOM SAX

來源:互聯網
上載者:User

標籤: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

本文出自 “ios” 部落格,請務必保留此出處http://10136044.blog.51cto.com/10126044/1679371

iOS 對於檔案的解析 JSON DOM SAX

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.