IOS:OC-XML(Sax)解析

1.先建立一個message.txt文檔,內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<messages>
<message>
<receiver>美女與野獸</receiver>
<content>不見不散</content>
<sender>如花似玉</sender>
</message>
<message>
<receiver>美女與野獸</receiver>
<content>啦啦啦</content>
<sender>六一快樂</sender>
</message>

 <message>
     <receiver>彭于晏</receiver>
     <content>華晨宇</content>
     <sender>吳亦凡</sender>
 </message>

</messages>

2.Message.h中聲明屬性柿顶,
//model中設(shè)置的屬性,要和xml中的標(biāo)簽名字一樣
@interface Message : NSObject

@property(nonatomic,copy)NSString * receiver;
@property(nonatomic,copy)NSString * content;
@property(nonatomic,copy)NSString * sender;

3.Message.m中寫一個防崩的方法
//防崩
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{

}
4.在storyboard中拖一個button控件都弹,并關(guān)聯(lián)方法
5.ViewController.m
<1>定義一個屬性
//解析時需要使用數(shù)組
@property(nonatomic,strong)NSMutableArray * dataArray;
//定義一個可變字符串拼接使用
@property(nonatomic,strong)NSMutableString * appendString;
<2>在方法中開始解析


- (IBAction)saxParseForXML:(UIButton *)sender {
    /*
     sax解析:
     要解析什么數(shù)據(jù)
     解析數(shù)據(jù)用什么接收
     誰有解析XML的能力
     使用代理對象告知解析器什么時候開始解析
     */
    //1.找到需要解析的數(shù)據(jù)
   NSString * filepath =  [[NSBundle mainBundle]pathForResource:@"message.txt" ofType:nil ];
    //2.將找到的文件轉(zhuǎn)化為數(shù)據(jù)
    NSData * fileData = [NSData dataWithContentsOfFile:filepath];
    //3:創(chuàng)建解析器對象
    NSXMLParser * parser = [[NSXMLParser alloc] initWithData:fileData];
    //4 給解析器設(shè)置代理
    parser.delegate = self;
    
    //5.通知解析開始干活
    [parser parse];
    
    
  
}
//實現(xiàn)協(xié)議中的方法
//4.1開始解析文檔:
-(void)parserDidStartDocument:(NSXMLParser *)parser{
    NSLog(@"開始解析");
    //解析出來的文檔。數(shù)據(jù)需要存儲萄金,所以定義可變數(shù)組存儲
    self.dataArray  =[NSMutableArray array];
    }
//4.2開始解析標(biāo)簽
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{

    NSLog(@"開始解析標(biāo)簽");
    //獲取模型對象
    if ([elementName isEqualToString:@"message"])  {
        //創(chuàng)建模型對象
        Message * message = [Message new];
        //將模型放入數(shù)組中
        [self.dataArray addObject:message];
    }

    //初始化可變字符串硅卢,拼接使用
    self.appendString = [NSMutableString string];
    
}

//4.3獲取文本
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    NSLog(@"獲取文本信息");
    //在獲取文本的內(nèi)容時堪滨,未必可以一次性取出计螺,可能多次取出,所以需要拼接
    [self.appendString appendString:string];
    

}
//4.4結(jié)束標(biāo)簽解析
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    NSLog(@"結(jié)束當(dāng)前標(biāo)簽");
    //找到數(shù)組最后一個對象冶忱,創(chuàng)建model對象1
   Message * message =  [self.dataArray lastObject];
    //使用KVC通過key將拼接的字符串給model
    [message setValue:self.appendString forKey:elementName];
    //拼接完畢尾菇,需要對字符串進行清空
    self.appendString = nil;
    

}
//4.5結(jié)束解析文檔
-(void)parserDidEndDocument:(NSXMLParser *)parser{
    NSLog(@"結(jié)束解析文檔");
    //將數(shù)組中存儲的對象打印出來進行測試:
    [self.dataArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSLog(@"%@,%@,%@",[obj receiver],[obj content],[obj sender]);
    }];
}
-(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{

    NSLog(@"解析文檔出錯%@",parseError);

}


```c
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市囚枪,隨后出現(xiàn)的幾起案子派诬,更是在濱河造成了極大的恐慌,老刑警劉巖链沼,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件默赂,死亡現(xiàn)場離奇詭異,居然都是意外死亡括勺,警方通過查閱死者的電腦和手機缆八,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朝刊,“玉大人耀里,你說我怎么就攤上這事蜈缤∈懊ィ” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵底哥,是天一觀的道長咙鞍。 經(jīng)常有香客問我,道長趾徽,這世上最難降的妖魔是什么续滋? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮孵奶,結(jié)果婚禮上疲酌,老公的妹妹穿的比我還像新娘。我一直安慰自己了袁,他們只是感情好朗恳,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著载绿,像睡著了一般粥诫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崭庸,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天怀浆,我揣著相機與錄音谊囚,去河邊找鬼。 笑死执赡,一個胖子當(dāng)著我的面吹牛镰踏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沙合,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼余境,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了灌诅?” 一聲冷哼從身側(cè)響起芳来,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猜拾,沒想到半個月后即舌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡挎袜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年顽聂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盯仪。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡紊搪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出全景,到底是詐尸還是另有隱情耀石,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布爸黄,位于F島的核電站滞伟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炕贵。R本人自食惡果不足惜梆奈,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望称开。 院中可真熱鬧亩钟,春花似錦、人聲如沸鳖轰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脆霎。三九已至总处,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間睛蛛,已是汗流浹背鹦马。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工胧谈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荸频。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓菱肖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旭从。 傳聞我的和親對象是個殘疾皇子稳强,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容