zoukankan      html  css  js  c++  java
  • iOS之解析

    解析:从事先规定好的格式中提取数据

    前提:提前约定好格式。

    XML解析

    DOM :Document Object Model解析  

    原理: 一次性读入整个XML  以栈的方式解析每一个标签,开标签入栈 关标签出栈 当栈中没有任何元素的时候解析结束  

    优点:  一次解析出全部数据 而且有明显的层级关系

    缺点:当XML太大的时候特别占内存

    解决:将大的XML分成多个小的XML

    SAX:Simple API for XML 解析 基于事件驱动的解析方式,逐行解析数据(采用协议回调机制)

    优势:逐行解析,不需要读入整个XML因此更节省内存空间  因为是基于回调的解析方式,所以用户可以更加灵活的控制解析过程

    缺点:需要用户自己去处理数据 

    NSXMLParser是IOS的XML解析类,采用sax方式解析数据 (不常用,几乎不用)

    GDataXMLNode是googol提供的开源XML解析类 采用DOM方式解析数据(常用此方式解析)

    使用流程:1 将GDataxMLNode.h和GDataXMLNode.m文件加入到项目中        

            2 进入Xcode  加入libxml.dylib类库 )(工程 - build Phases 添加上类库 )    

         

            3  找到Search Paths段,在Header Search Paths添加值为:/usr/include/libxml2

     

     

     

    NSString *xmlFilePath = [[NSBundlemainBundle] pathForResource:@"Student"ofType:@"xml"];

        NSData *data = [NSData dataWithContentsOfFile:xmlFilePath];

        

        GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; // 解析完毕

        NSLog(@"%@", document.rootElement);

        

        

        // xPath

        // 相对路径使用//表示相对路径

        // 取出节点中所有叫 name 的节点....

        NSArray *names = [document nodesForXPath:@"//student/name" error:nil];

        NSArray *sexs = [document nodesForXPath:@"//student/sex" error:nil];

        NSArray *ages = [document nodesForXPath:@"//student/age" error:nil];

           

        //绝对路径要给出完整路径  / 表示绝对路径

        NSArray *sex = [document nodesForXPath:@"/students/student/sex" error:nil];

     

    JSON解析

    javascripe object na

    1 json 格式要正确 最后一个元素后面没有逗号“,”

    - (id)objectFromJSONString 将字符串解析成指定对象

    - (id)objectFromJSONData 将data数据解析成指定对象

     /**

         *  JSON解析 

         * 1 创建(或导入).json文件

         * 2 获取文件路径  NSString *filePath = [[NSBundle mainBundle] pathForResource:@"文件名" ofType:@"json"]

         * 3 得到文件中的数据  NSString NSData

         * 4 解析 a 使用第三方工具JSONKit b 使用 NSJSONSerialization

         */

        

        NSString *filePath = [[NSBundlemainBundle] pathForResource:@"Person"ofType:@"json"];

     

        //解析

        // 使用第三放解析工具 JSONKit

        // 通过字符串

        NSString *JSONStr = [NSStringstringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding  error:nil];

        NSDictionary *JSONDic = [JSONStr objectFromJSONString];

        

        // 通过data数据

        NSData *JSONData = [NSData dataWithContentsOfFile:filePath];

        NSDictionary *JSONDic2 = [JSONData objectFromJSONData];

        

        // 使用苹果自带的解析类 NSJSONSerialization

        NSDictionary *JSONDic3 = [NSJSONSerializationJSONObjectWithData:JSONData options:(NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves) error:nil];

        

    //    NSString --> NSData

        NSString *theStr = @"Hello Lanou";

        NSData *theData = [theStr dataUsingEncoding:NSUTF8StringEncoding];

          

    //    NSData --> NSString

        NSString *string = [[NSStringalloc] initWithData:theData encoding:NSUTF8StringEncoding];

  • 相关阅读:
    socket实现一个简单的echo服务
    Netty实现丢弃服务协议(Netty4.X学习一)
    大型情感剧集Selenium:8_selenium网页截图的四种方法
    python原类、类的创建过程与方法
    Flask使用bootstrap为HttpServer添加上传文件功能
    充满含金量的一场云原生Meetup,入场券免费发送中……
    Hadoop伪分布式集群的安装部署
    从缓冲池命中率角度判断自己的MYSQL数据库是否需要扩容内存
    MySQL分区表概述
    如何防止mysql数据库被勒索
  • 原文地址:https://www.cnblogs.com/NatureZhang/p/3718474.html
Copyright © 2011-2022 走看看