SAX解析

#import "ViewController.h"

#import "Student.h"

//一共要3步.第一引入libxml2.tbd//2.-fno-objc-arc//3./usr/include/libxml2

@interface ViewController ()<NSXMLParserDelegate>

@property(nonatomic,strong)NSString *currentlement;//存放當(dāng)前節(jié)點(diǎn)

@property(nonatomic,strong)NSMutableArray *array;//存放解析出來的模型

@end

@implementation ViewController

-(NSMutableArray *)array{

if (!_array) {

_array = [NSMutableArray array];

}return _array;

}

- (void)viewDidLoad {

[super viewDidLoad];

NSLog(@"SAX解析");

//1.獲取文件路徑

NSString *filepath = [[NSBundle mainBundle]pathForResource:@"XML_stu" ofType:@"txt"];

//2.創(chuàng)建data

NSData *data = [NSData dataWithContentsOfFile:filepath];

//3.創(chuàng)建解析對(duì)象

NSXMLParser *parser =[[NSXMLParser alloc]initWithData:data];

//4.遵循協(xié)議設(shè)置代理

parser.delegate = self;

//5.開始解析

[parser parse];

}

//實(shí)現(xiàn)協(xié)議方法

//1.開始解析

-(void)parserDidStartDocument:(NSXMLParser *)parser{

NSLog(@"開始解析");

}

//2.開始解析標(biāo)簽-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary*)attributeDict{

//獲取當(dāng)前節(jié)點(diǎn)

NSLog(@"%@",elementName);

self.currentlement =elementName;

//這一步的作用是根據(jù)節(jié)點(diǎn)提供的數(shù)據(jù),來創(chuàng)建對(duì)應(yīng)的modle(沒有復(fù)制過程,只是創(chuàng)建模型)

if ([elementName isEqualToString:@"student"]) {

//初始化一個(gè)學(xué)生對(duì)象

Student *stu =[[Student alloc]init];

[self.array addObject:stu];

}

//3.讀取標(biāo)簽的值

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

NSLog(@"%@",string);

//我們需要數(shù)組里面最后一個(gè)值

Student *stu =self.array.lastObject;

//使用KVC編碼賦值

[stu setValue:string forKey:self.currentlement];

}

//4.結(jié)束標(biāo)簽解析

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

NSLog(@"%@",elementName);

self.currentlement =nil;

}

//5.結(jié)束文檔解析

-(void)parserDidEndDocument:(NSXMLParser *)parser{

NSLog(@"文檔解析結(jié)束");

for (Student *stu in self.array) {

NSLog(@"%@",stu);

}

}

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容