zoukankan      html  css  js  c++  java
  • 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];
        }
     
  • 相关阅读:
    Dubbo架构设计及原理详解
    Zookeeper+Dubbo+SpringMVC环境搭建
    Java 延迟队列使用
    深入理解Spring Redis的使用 (九)、通过Redis 实现 分布式锁 的 BUG,以及和数据库加锁的性能测试
    深入理解Spring Redis的使用 (八)、Spring Redis实现 注解 自动缓存
    深入理解Spring Redis的使用 (七)、Spring Redis 使用 jackson序列化 以及 BaseDao代码
    深入理解Spring Redis的使用 (六)、用Spring Aop 实现注解Dao层的自动Spring Redis缓存
    深入理解Spring Redis的使用 (五)、常见问题汇总
    深入理解Spring Redis的使用 (四)、RedisTemplate执行Redis脚本
    深入理解Spring Redis的使用 (三)、使用RedisTemplate的操作类访问Redis
  • 原文地址:https://www.cnblogs.com/hepingqingfeng/p/5457725.html
Copyright © 2011-2022 走看看