NSXMLParser解析簡例,NSXMLParser解析簡
本篇以以下類型的XML為例解析:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="e0">密碼錯誤</string>
<string name="e1">手機號不存在</string>
<string name="e2">未找到該城市</string>
<string name="e3">參數異常</string>
<string name="e4">魚種庫為空白</string>
<string name="e6">檔案為空白</string>
<string name="e7">參數異常或為空白</string>
<string name="e8">發布失敗</string>
<string name="e10">token異常,請重新登入</string>
<string name="e11">釣點不存在</string>
<string name="e12">釣點id未找到</string>
<string name="e13">釣點id錯誤</string>
<string name="e14">收藏失敗</string>
<string name="e15">已收藏</string>
<string name="e16">經緯度參數錯誤</string>
<string name="e18">城市不可為空</string>
<string name="e17">無更多釣點</string>
<string name="e19">插入失敗</string>
<string name="e20">手機號碼或驗證碼不正確</string>
<string name="e21">參數類型錯誤</string>
<string name="e22">資料寫入錯誤</string>
</resources>
-(void)parserXMLFile
{
//開啟xml,讀取檔案內容後關閉檔案
NSString * path = [[NSBundle mainBundle] pathForResource:@"error" ofType:@"xml"];
NSFileHandle * file = [NSFileHandle fileHandleForReadingAtPath:path];
NSData * data = [file readDataToEndOfFile];
[file closeFile];
//初始化解析工具
NSXMLParser * m_parser = [[NSXMLParser alloc]initWithData:data];
//設定代理
[m_parser setDelegate:self];
//開始解析,設定解析結果flag,解析結束後會執行
BOOL flag = [m_parser parse];
if (flag) {
QLLog(@"解析成功");
}else{
QLLog(@"解析失敗");
}
}
//開始解析
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
dicXML = [[NSMutableDictionary alloc]initWithCapacity:10];
}
//遇到開始標記
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
//QLLog(@"elementName:%@\n namespaceURI:%@\n qName:%@ \n attributeDic:%@",elementName,namespaceURI,qName,attributeDict);
if ([elementName isEqualToString:@"string"]) {
keyCode = [attributeDict objectForKey:@"name"]; //錯誤碼
QLLog(@"keyCode:%@",keyCode);
}
}
//遇到結束標記
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
//QLLog(@"end: elementName:%@\n namespaceURI:%@\n qName:%@ \n",elementName,namespaceURI,qName);
}
//節點中有值時進入此方法
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
QLLog(@"key:%@",keyCode);
QLLog(@"value:%@",string);//錯誤說明
string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
if(keyCode.length&&string.length){
[dicXML setObject:string forKey:keyCode];
}
}
//解析結束
-(void)parserDidEndDocument:(NSXMLParser *)parser
{
QLLog(@"dicData:%@",dicXML);
}