• XML解析


    一、简介
    一个常见的XML文档一般由以下部分组成
    文档声明            <?xml version="1.0" encoding="UTF-8" ?>
    元素(Element)  <video>小黄人</video>
    属性(Attribute)   <video name="小黄人第01部"length="30" />
     
    XML的解析方式有2种
    DOM:一次性将整个XML文档加载进内存,比较适合解析小文件
    SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件
     
    在iOS中,解析XML的手段有很多
    苹果原生
    NSXMLParser:SAX方式解析,使用简单
    第三方框架
    libxml2:纯C语言,默认包含在iOSSDK中,同时支持DOM和SAX方式解析
    GDataXML:DOM方式解析,由Google开发,基于libxml2
     
    XML解析方式的选择建议
    大文件:NSXMLParser、libxml2
    小文件:GDataXML
     
    一、解析方式
    1、NSXMLParser(SAX方式 大文件)
      使用步骤

           NSXMLParser *parser = [[NSXMLParseralloc] initWithData:data];             // 传入XML数据,创建解析器

           parser.delegate = self;                 // 设置代理,监听解析过程

           [parser parse];          // 开始解析,会卡住,直到解析完毕

           NSXMLParser-delegate
      当扫描到文档的开始时调用(开始解析)

           - (void)parserDidStartDocument:(NSXMLParser *)parser

      当扫描到文档的结束时调用(解析完毕)

           - (void)parserDidEndDocument:(NSXMLParser *)parser

     当扫描到元素的开始时调用(attributeDict存放着元素的属性)

           - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementNamenamespaceURI:(NSString *)namespaceURIqualifiedName:(NSString  *)qName attributes:(NSDictionary *)attributeDict

      当扫描到元素的结束时调用

           - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementNamenamespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName


    2、GDataXML(DOM方式 小文件)
          GDataXML配置
      GDataXML基于libxml2库,得做以下配置
      导入libxml2库
           
      设置libxml2的头文件搜索路径(为了能找到libxml2库的所有头文件)
      在Head Search Path中加入/usr/include/libxml2
      设置链接参数(自动链接libxml2库)
      在OtherLinkerFlags中加入-lxml2
      由于GDataXML是非ARC的,因此得设置编译参数
           
     
         解析方式
         // 1.加载文档
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
        // 2.获得根元素
        GDataXMLElement *root = doc.rootElement;    
        // 3.获得所有video元素
        NSArray *elements = [root elementsForName:@"video"];    
        // 4.将GDataXMLElement对象转成HMVideo模型
        NSMutableArray *videos = [NSMutableArray array];
        for (GDataXMLElement *ele in elements) {
            HMVideo *video = [[HMVideo alloc] init];      
            video.ID = [ele attributeForName:@"id"].stringValue.intValue;               //一个一个元素的解析
            video.length = [ele attributeForName:@"length"].stringValue.intValue;
            video.name = [ele attributeForName:@"name"].stringValue;
            video.image = [ele attributeForName:@"image"].stringValue;
            video.url = [ele attributeForName:@"url"].stringValue;
            [videos addObject:video];
        }
     
  • 相关阅读:
    php解决前端调接口跨域问题
    降低token 被盗风险安全问题
    u盘怎么解除写保护状态,u盘写保护怎么去掉
    安装vsftpd时出现错误
    对于vim 编译器的设置
    Vim 怎么设置显示行号,永久性显示行号
    Ubuntu系统设置过程中信息显示不全
    控制文件夹名显示的长短
    linux中好玩的游戏
    安装VMware Tools
  • 原文地址:https://www.cnblogs.com/hepingqingfeng/p/5457725.html
Copyright © 2020-2023  润新知