• 数据解析


    XML在线校验工具:

    http://tool.oschina.net/codeformat/xml

    可扩展标记语言(EXtensible Markup Language)

    一种标记语言,很类似 HTML(传输、与显示的区别) 

    设计宗旨是传输数据,而非显示数据 

    标签没有被预定义

    被设计为具有自我描述性

    是W3C(万维网联盟) 的推荐标准

    XML文档是一种树结构:

    必须包含根元素

    所有元素均可拥有子元素

    其中的元素形成了一棵文档树

    <root> 

    <child> 

    <subchild>.....</subchild> 

    </child>

         </root> 

    1 <?xml version="1.0" encoding=“GB2312” standalone=“no”  ?> 

    2 <?xml-stylesheet type=“text/xsl” href=“paixu.xsl” ?>

    3 <!--下面是名单列表-->

    4 <学生列表>

    5 <学生 id = “001”>

    6 <学号>200520101</学号>

    7 <姓名>王佳</姓名>

    8 </学生>

    9 <学生 id =“002”>

    10 <学号>200520102</学号>

    11 <姓名>许琛</姓名>

    12 </学生>

    13 </学生列表>

    XML声明:第1行

    处理命令(可选):第2行

    注释(可选):第3行

    XML元素:第4到13行

    XML文档声明:

    每个文档都必须以XML声明开头

    包括XML版本(不可省)及所使用字符集等信息

    XML文档前面不允许在有其它任何字符,包括空格

    举例:

    <?xml version="1.0" endcoding="GB2312" standalone=“yes"?>

    XML元素与标记:

    元素是XML文档的基本单元

    标记用来对元素内容进行说明

    标记和元素内容共同表示XML文档的意义和逻辑结构

    例:

    使用格式: <标记>元素内容</标记>

    <mobile>XML解析</mobile>

    【解析原理】

    XML解析:

    将 XML数据从其序列化字符串格式转换为分层格式的过程

    XML解析方式:

    基于树型的解析:将XML文档转换成树型结构

    基于事件的解析:将XML文档视为一系列的事件。当一个特殊事件发生时,解析器将调用开发者提供的函数来处理。

    【DOM解析】

    英文“Document Object Model”的缩写,中文意思为“文档对象模型”

    基于树型解析的XML解析方式

    通过树型结构存取XML文档  

    屏幕快照 2015-09-27 下午4.40.32.png      

    【GDataXML配置-手动配置】

    GDataXML基于libxml2库,得做以下配置

    导入libxml2库

    设置libxml2的头文件搜索路径(为了能找到libxml2库的所有头文件)

    在Header Search Path中加入/usr/include/libxml2

    设置链接参数(自动链接libxml2库)

    在Other Linker Flags中加入-lxml2

    【GDataXML配置-cocoPods配置】

    pod 'GDataXML-HTML', '~> 1.3.0'

    【GDataXML-类介绍】

    【GDataXML用法】

    //获取文档

        GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:data encoding:NSUTF8StringEncoding error:nil];

        //获取根元素

        GDataXMLElement *rootElement = document.rootElement;

        //获取所有的学生元素

        NSArray *array = [rootElement elementsForName:@"stu"];

        //遍历所有元素

        for (GDataXMLElement *elent in array) {

            //标签中的属性

            NSString *ID = [elent attributeForName:@"id"].stringValue;

            //取出关键字对应的所有内容中的第一个元素

            GDataXMLElement *elent1 = [elent elementsForName:@"name"].firstObject;

            NSString *name = elent1.stringValue;

            GDataXMLElement *elent2 = [elent elementsForName:@"sex"].firstObject;

            NSString *sex = elent2.stringValue;

        }

    【XML解析---SAX解析】

    1. 创建NSXMLParser实例,并传入从服务器接收的XML数据

    2. 定义解析器代理

    3. 解析器解析

    4. 通过解析代理方法完成XML数据的解析

    NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];

        parser.delegate = self;

        [parser parse];

    // 1. 开始解析XML文档

    - (void)parserDidStartDocument:

    // 2. 开始解析某个元素,会遍历整个XML,识别元素节点名称

    - (void)parser:didStartElement:namespaceURI:qualifiedName:attributes:

    // 3. 文本节点,得到文本节点里存储的信息数据,对于大数据可能会接收多次! 为了节约内存开销

    - (void)parser:foundCharacters:

    // 4. 结束某个节点,存储从parser:foundCharacters:方法中获取到的信息

    - (void)parser:didEndElement:namespaceURI:qualifiedName:

    注意:在解析过程中,2、3、4三个方法会不停的重复执行,直到遍历完成为止

    // 5. 解析XML文档结束

    - (void)parserDidEndDocument:

    // 6. 解析出错

    - (void)parser:parseErrorOccurred:

                       

    【JSON简介】

    JSON在线校验:http://www.bejson.com/

    作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式

    基于JavaScript的一个子集

    易读性略差,编码手写难度大,数据量小

    JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中

    作为一种轻量级的数据交换格式,JSON正在逐步取代XML,成为网络数据的通用格式

    从iOS 5开始,使用NSJSONSerialization对JSON解析

    【字符串】

    “city”:”北京”

    【NSNumber】

    “age”:   10

    【字典】

    {

        "weatherinfo": {

            "city": "北京",

            "cityid": "101010100",

            "temp": "10",

            "WD": "东南风",

            "WS": "2级",

            "SD": "26%",

            "WSE": "2",

            "time": "10:25",

            "isRadar": "1",

            "Radar": "JC_RADAR_AZ9010_JB",

            "njd": "暂无实况",

            "qy": "1012"

        }

    }

    【数组】

      {

        “学生”: [

            {

                "姓名": "小明",

                "年龄": "20"

            },

            {

                "姓名": "小强",

                "年龄": "20"

            }

        ]

    }

    注意:所有的key必须用双引号阔起来

    【JSON解析】

    解析的本质,就是将JSON数据转换为OC数据

    其他常见的三种JSON解析第三方库:

    SBJson

    JSONKit

    TouchJson

    从性能上来说,NSJSONSerialization最好,JSONKit其次。SBJson使用较为广泛,API简单易用

    【NSJSONSerialization】

    //将OC对象转换为JSON Data

    + (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

    //将JSON Data转换为OC对象

    + (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

    《了解》

    【JSONKit】

    NSDictionary *weatherDic = [jsonString  objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];

         NSDictionary *weatherInfo = [weatherDic objectForKey:@"weatherinfo"];

    【SBJson】

     

    【TouchJson】

     

  • 相关阅读:
    完全背包和多重背包的混合 F
    多重背包转化成完全背包 E
    I
    D. Beautiful Array DP
    B. Long Path dp
    C. Barcode dp
    dp D. Caesar's Legions
    docker-mysql
    日志级别facility
    实时同步lsyncd
  • 原文地址:https://www.cnblogs.com/huiyi-520/p/5584766.html
Copyright © 2020-2023  润新知