// 解析數據的方式也有兩種
1> DOM 一口悶,直接把得到的數據一次性加載到內存,然後開始解析(適合小文檔)
2> SAX 細嚼慢嚥,一口一口吃,一個一個子節點開始解析,解析完這個節點再解析下一個。(適合大文檔)
iOS常見的解析有:
1> NSXMLParser (蘋果官方自帶的)使用SAX方式解析
1.創建NSXMLParser對象--parser
2.設置代理 parser.delegate = self;
// 實現代理方法
#pragma mark - XML代理方法
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
// 如果是根節點(元素), 直接返回
if ([elementName isEqualToString:@"videos"]) return;
// 來到這裏說明是子節點“video”
// 利用MVC模式賦值
Video *video = [Video videoWithDict:attributeDict];
[self.videos addObject:video];
}
3.開始解析
[parser parser];
2> GDataXMLDocument (Google寫的)使用DOM方式解析--推薦使用
1. 獲取這個文檔
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
2. 獲得文檔的根節點
GDataXMLElement *element = [document rootElement];
3. 獲取根元素裏面的所有子元素
NSArray *arrayVideos = [element elementsForName:@"video"];
4. 遍歷數組,給模型的屬性賦值
3> NSJSONSerialization (蘋果自帶的) 使用與JSONS數據解析
1. 通過NSJSONSerialization類方法獲取根節點數據的字典
[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
2. 根據字典獲取數組
3. 遍歷數組,獲取字典給模型的屬性賦值(KVC)