XML解析方式

来源:互联网 发布:知乎 竖肩章 编辑:程序博客网 时间:2024/06/18 12:24

1.原生:NSXMLParser(SAX形式解析)
SAX:一次性将整个XML加载进内存中,适合小文件解析
2.第三方框架:GDataXML(DOM形式解析, 非arc) libxml2(纯c)
DOM:从根元素开始解析,一个一个按顺序解析元素,适合大文件解析


NSXMLParser解析

            //4.1 创建一个解析器            NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];            //4.2 设置代理            parser.delegate = self;            //4.3 开始解析            [parser parse]; prama mark ---- NSXMLParserDelegate          //1.开始解析XML文档-(void)parserDidStartDocument:(nonnull NSXMLParser *)parser{    NSLog(@"parserDidStartDocument");}//2.开始解析XML中某个元素的时候调用,比如<video>-(void)parser:(nonnull NSXMLParser *)parser didStartElement:(nonnull NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(nonnull NSDictionary<NSString *,NSString *> *)attributeDict{    NSLog(@"didStartElement---%@---%@",elementName,attributeDict);    if ([elementName isEqualToString:@"videos"]) {        return;    }    //字典转模型    //    XMGVideo *video = [[XMGVideo alloc]init];    //    video.keyValues = attributeDict;    XMGVideo *video = [XMGVideo objectWithKeyValues:attributeDict];    [self.videos addObject:video];}//3.当某个元素解析完成之后调用,比如</video>-(void)parser:(nonnull NSXMLParser *)parser didEndElement:(nonnull NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName{    NSLog(@"didEndElement---%@",elementName);}//4.XML文档解析结束-(void)parserDidEndDocument:(nonnull NSXMLParser *)parser{    NSLog(@"parserDidEndDocument");}

GDataXML解析

    GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:data options:kNilOptions error:nil];//4.2 获取XML文档的根元素,根据根元素取出XML中的每个子元素(所有名称为video的子元素)    NSArray * elements = [doc.rootElement elementsForName:@"video"];//4.3 取出每个子元素的属性并转换为模型    for (GDataXMLElement *ele in elements) {     XMGVideo *video = [[XMGVideo alloc]init];     video.name = [ele           attributeForName:@"name"].stringValue;              video.length = [ele attributeForName:@"length"].stringValue.integerValue;     video.url = [ele attributeForName:@"url"].stringValue;     video.image = [ele attributeForName:@"image"].stringValue;     video.ID = [ele attributeForName:@"id"].stringValue;
0 0
原创粉丝点击