XML解析
一,属性和元素的区别
二,XML的解析方式有两种
SAS:适合大,小文件解析,从上往下,一点,一点读取。苹果推荐
DOMS: 适合小文件解析,一次性将文档以属性结构读入内存。对内存消耗比较大
解析步骤:
1,打开文档
2,开始节点
3,发现节点里面的内容
4,结束节点
5,结束文档
在iOS中,解析XML的手段有很多
苹果原生
NSXMLParser:SAX方式解析,使用简单
第三方框架:
libxml2:纯c语言,默认包含在iOSSDK中,同时支持DOM和sax两种方式解析
GDataXML:DOM方式解析,有谷歌开发
XML解析方式的选择建议
大文件:NSXMLParser,libxml2
小文件:GDataXML
//XML解析
//实例化一个XML的解析器,通过代理来实现XML的解析
NSXMLParser * parse = [[NSXMLParser alloc] initWithData:data];
//设置代理
parse.delegate = self;
//解析器开始解析
[parse parse];
}
- (void) parserDidStartDocument:(NSXMLParser *)parser
{
NSLog(@"打开文档,准备开始解析");
//初始化数据,清空数据
}
//开始节点
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary
{
NSLog(@"开始节点%@@----%@",elementName,attributeDict);
//如果开始节点的名称是video,就创建一个对象
//清空节点内容
}
-(void) parser:(NSXMLParser *)parser foundCharacters:(nonnull NSString *)string
{
[self.elementString isEqualToString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(nonnull NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName
{
NSLog(@"4,结束节点%@",elementName);
if([elementName isEqualToString:@"video"])
{
[self.videoArray addObject:self.currentVideo];
}else if (![self.elementString isEqualToString:@"videos"])
{
}
}
- (void) parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"结束文档");
//xml真正结束,刷回主线程更新UI
dispatch_async(dispatch_get_main_queue(), ^{
//更新数据,重新加载tableView
});
}