XML解析方式

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值