XML文件解析

對下圖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
相關文章
相關標籤/搜索