面试题系列(四)-数据解析

1.JSONKit、SBJson、TouchJSON和原生的区别?

JSONKit、SBJson、TouchJSON
性能从左到右,越右越差,主要就是性能上的差别

2.分析json、xml的区别

可读性方面:基本相同,xml的可读性比较好

可扩展性方面:都具有很好的扩展性

编码难度方面:相对而言:JSON的编码比较容易

解码难度:json的解码难度基本为零,xml需要考虑子节点和父节点

数据交互方面:json与JavaScript的交互更加方面,更容易解析处理,更好的数据交互

数据描述方面:xml对数据描述性比较好

传输速度方面:json的速度远远快于xml

3.json、xml解析方式的底层是如何处理的?

JSON底层原理

遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}号,[]号, : 号 等进行区分,{}号是一个字典 的开始,[]号是一个数组的开始, : 号是字典的键和值的分水岭,最终乃是将json数据转化为字典,字典中值可能是字典,数组,或字符串而已。

XML底层原理

XML解析常用的解析方法有两种:DOM解析和SAX解析。
DOM 采用建立树形结构的方式访问 XML 文档,而 SAX 采用的事件模型。
DOM 解析把 XML 文档转化为一个包含其内容的树,并可以对树进行遍历。
使用 DOM 解析器的时候需 要处理整个 XML 文档,所以对性能和内存的要求比较高。
SAX在解析 XML 文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。
SAX 对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。

(补充)其他解析方式有自定义二进制解析,就是按字节去解析,电话会谈就是如此,还可以是字符串之间用特殊符号连接的数据,将此数据用特殊符号可以分割成所用数据。

4.XML是什么? XML与HTML的区别?

XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows,Mac OS,Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。
XML去掉了之前令许多开发人员头疼的SGML(标准通用标记语言)的随意语法。在XML中,采用了如下的语法:

    任何的起始标签都必须有一个结束标签。
    可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如。XML解析器会将其翻译成。
    标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如this is asamplestring。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。
    所有的特性都必须有值。
    所有的特性都必须在值的周围加上双引号。

XML与HTML的设计区别
XML的核心是数据,其重点是数据的内容。而HTML 被设计用来显示数据,其重点是数据的显示。
XML和HTML语法区别
HTML的标记不是所有的都需要成对出现,XML则要求所有的标记必须成对出现;HTML标记不区分大小写,XML则 大小敏感,即区分大小写。

5.数据解析(json和XML)

json数据的解析

通常借助一些开源的框架如:SBJson,TouchJson,jsonKit,Apple 提供的原生的JSon解析 NSJSON Serialization等。去json数据转化为IOS中常用的字典等。

XML数据的解析
xml分为SAX和DOM两种解析方式。

1.DOM解析XML时
读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意XML节点,读取它的属性和值。而且通常情况下,可以借助XPath,直接查询XML节点。

2.SAX解析XML
是基于事件通知的模式,一边读取XML文档一边处理,不必等整个文档加载完之后才采取操作,当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理。

iOS平台下,比较常用的XML解析类库有如下几种:

NSXMLParser,,这是一个SAX方式解析XML的类库,默认包含在iOS SDK中,使用也比较简单。

libxml2,是一套默认包含在iOS SDK中的开源类库,它是基于C语言的API,所以使用起来可能不如NSXML方便。这套类库同时支持DOM和SAX解析,libxml2的SAX解析方式还是非常酷的,因为它可以边读取边解析,尤其是在从网上下载一个很大的XML文件,就可以一边下载一边对已经下载好的内容进行解析,极大的提高解析效率。

TBXML,这是一套轻量级的DOM方式的XML解析类库,有很好的性能和低内存占用,不过它不对XML格式进行校验,不支持XPath,并且只支持解析,不支持对XML进行修改。

TouchXML,这也是一套DOM方式的XML解析类库,支持XPath,不支持XML的修改。

KissXML,这是一套基于TouchXML的XML解析类库,和TouchXML相比,支持了XML的修改。

TinyXML,这是一套小巧的基于C语言的DOM方式进行XML解析的类库,支持对XML的读取和修改,不直接支持XPath,需要借助另一个相关的类库TinyXPath才可以支持XPath。

GDataXML,这是一套Google开发的DOM方式XML解析类库,支持读取和修改XML文档,支持XPath方式查询。

你可能感兴趣的:(iOS面试,面试题)