對下圖XML文件進行解析:
person.xml
能夠把這個XML數據的根目錄看作是一個數組,數組裏存放了4個叫person的字典(這四個對象經過id來區分),字典裏有三個鍵值對(name、personID、age)
1.解析XML文件前的準備:
(1)要實現 <NSXMLParserDelegate>協議。
(2)實現幾個代理方法:
//1.開始解析
-(void)parserDidStartDocument:(NSXMLParser *)parser
//2.解析到一個元素
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
//3.查看到一個元素的內容
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
//4.解析節點結束
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
(3)建立一個model類,用來接收上圖中四個對象(看作是四個對象person一、
person2
、
person3
、
person4
)
2.開始解析XML文件
第一步:獲取xml文件
NSString *path = [[NSBundle mainBundle]pathForResource:@"person" ofType:@"xml
」]; //xml文件路徑
NSData *data = [NSData dataWithContentsOfFile:path]; //經過
xml文件路徑獲取xml中的數據
NSXMLParser *xml = [[NSXMLParser alloc]initWithData:data];
xml.delegate = self; //當前類實現xml的代理
[xml parse];//開始解析
第二步:實現幾個代理方法
//1.開始解析
-(void)parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@"開始解析");
}
//2.解析到一個元素(節點)
<root>、 <person id="1」> 、 <name> 這些都被稱爲節點。
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
NSLog(@"解析到一個節點:%@",elementName);
if ([elementName isEqualToString:@"person"]) {
_model = [[Model alloc]init];
}
}
//3.查看到一個元素的內容(節點和斜槓節點之間的內容jack) <name>jack</name>
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"查看到一個元素的內容:%@",string);
_str = string;
}
//4.解析節點結束 遇到帶斜槓的節點(</name>),會進入這個方法
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
NSLog(@"該節點結束解析:%@",elementName);
if ([elementName isEqualToString:@"root"]) {
// 遇到</root> 節點
NSLog(@"The End");
}else if ([elementName isEqualToString:@"person"]){
// 遇到</person>節點
//一組數據結束(本xml文件一共四組)
[_array addObject:_model];
//一個model對象被添加到數組
}else{
// 遇到</name> </personID> </age>節點,說明已經讀取到name、 personID 或者age的數據 _str了,在這裏用KVC給model對象賦值
//elementName = name、 personID 或者age
[_model setValue:_str forKey:elementName];
//用KVC給model對象賦值
}
}
打印結果:
2016-01-23 10:17:09.115 1.22 xml數據存儲[1118:30883] 開始解析
2016-01-23 10:17:09.115 1.22 xml數據存儲[1118:30883] 解析到一個節點:root
2016-01-23 10:17:09.116 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.116 1.22 xml數據存儲[1118:30883] 解析到一個節點:person
2016-01-23 10:17:09.116 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.116 1.22 xml數據存儲[1118:30883] 解析到一個節點:name
2016-01-23 10:17:09.116 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:jack
2016-01-23 10:17:09.116 1.22 xml數據存儲[1118:30883] 該節點結束解析:name
2016-01-23 10:17:09.117 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.117 1.22 xml數據存儲[1118:30883] 解析到一個節點:personID
2016-01-23 10:17:09.117 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:2015
2016-01-23 10:17:09.117 1.22 xml數據存儲[1118:30883] 該節點結束解析:personID
2016-01-23 10:17:09.117 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.117 1.22 xml數據存儲[1118:30883] 解析到一個節點:age
2016-01-23 10:17:09.118 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:20
2016-01-23 10:17:09.118 1.22 xml數據存儲[1118:30883] 該節點結束解析:age
2016-01-23 10:17:09.118 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.118 1.22 xml數據存儲[1118:30883] 該節點結束解析:person
2016-01-23 10:17:09.183 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.184 1.22 xml數據存儲[1118:30883] 解析到一個節點:person
2016-01-23 10:17:09.184 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.184 1.22 xml數據存儲[1118:30883] 解析到一個節點:name
2016-01-23 10:17:09.184 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:rose
2016-01-23 10:17:09.184 1.22 xml數據存儲[1118:30883] 該節點結束解析:name
2016-01-23 10:17:09.184 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.185 1.22 xml數據存儲[1118:30883] 解析到一個節點:personID
2016-01-23 10:17:09.185 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:2016
2016-01-23 10:17:09.185 1.22 xml數據存儲[1118:30883] 該節點結束解析:personID
2016-01-23 10:17:09.185 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.185 1.22 xml數據存儲[1118:30883] 解析到一個節點:age
2016-01-23 10:17:09.185 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:18
2016-01-23 10:17:09.185 1.22 xml數據存儲[1118:30883] 該節點結束解析:age
2016-01-23 10:17:09.186 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.186 1.22 xml數據存儲[1118:30883] 該節點結束解析:person
2016-01-23 10:17:09.212 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.212 1.22 xml數據存儲[1118:30883] 解析到一個節點:person
2016-01-23 10:17:09.212 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.212 1.22 xml數據存儲[1118:30883] 解析到一個節點:name
2016-01-23 10:17:09.213 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:tom
2016-01-23 10:17:09.213 1.22 xml數據存儲[1118:30883] 該節點結束解析:name
2016-01-23 10:17:09.213 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.213 1.22 xml數據存儲[1118:30883] 解析到一個節點:personID
2016-01-23 10:17:09.213 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:2017
2016-01-23 10:17:09.213 1.22 xml數據存儲[1118:30883] 該節點結束解析:personID
2016-01-23 10:17:09.214 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.214 1.22 xml數據存儲[1118:30883] 解析到一個節點:age
2016-01-23 10:17:09.214 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:19
2016-01-23 10:17:09.214 1.22 xml數據存儲[1118:30883] 該節點結束解析:age
2016-01-23 10:17:09.214 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.214 1.22 xml數據存儲[1118:30883] 該節點結束解析:person
2016-01-23 10:17:09.214 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.215 1.22 xml數據存儲[1118:30883] 解析到一個節點:person
2016-01-23 10:17:09.313 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.314 1.22 xml數據存儲[1118:30883] 解析到一個節點:name
2016-01-23 10:17:09.314 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:jerry
2016-01-23 10:17:09.314 1.22 xml數據存儲[1118:30883] 該節點結束解析:name
2016-01-23 10:17:09.314 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.314 1.22 xml數據存儲[1118:30883] 解析到一個節點:personID
2016-01-23 10:17:09.314 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:2018
2016-01-23 10:17:09.315 1.22 xml數據存儲[1118:30883] 該節點結束解析:personID
2016-01-23 10:17:09.315 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.315 1.22 xml數據存儲[1118:30883] 解析到一個節點:age
2016-01-23 10:17:09.315 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:21
2016-01-23 10:17:09.315 1.22 xml數據存儲[1118:30883] 該節點結束解析:age
2016-01-23 10:17:09.316 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.316 1.22 xml數據存儲[1118:30883] 該節點結束解析:person
2016-01-23 10:17:09.316 1.22 xml數據存儲[1118:30883] 查看到一個元素的內容:
2016-01-23 10:17:09.316 1.22 xml數據存儲[1118:30883] 該節點結束解析:root
2016-01-23 10:17:09.317 1.22 xml數據存儲[1118:30883] The End