歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> iOS高級編程之XML,JSON數據解析

iOS高級編程之XML,JSON數據解析

日期:2017/3/1 9:29:26   编辑:Linux編程

解析的基本概念
所謂“解析”:從事先規定好的格式串中提取數據
解析的前提:提前約定好格式、數據提供方按照格式提供數據、數據獲取方按照格式獲取數據
iOS開發常見的解析:XML解析、JSON解析

一、XML數據結構
XML數據結構基本概念
XML:Extensible Markup language (可擴展標記語言),主流格式之一,可以用來存儲和傳輸數據格式之一,可以用來存儲和傳輸數據

XML數據格式的功能
1、數據交換
2、內容管理
3、用作配置文件

XML數據結構的語法
1、聲明
2、節點使用一對標簽表示
3、根節點是起始節點,只有一個。節點可以嵌套
4、節點可以有值,存儲在一對標簽中



如何進行XML解析
有以下兩種方法:
1、SAX解析
SAX:Simple API for XML .基於事件驅動的解析方式,逐行解析數據。(采用協議回調機制)
SAX解析XML,是基於事件通知的模式,一邊讀取XML文檔一邊處理,不必等整個文檔加載完之後才采取操作,SAX解析器會檢測整個XML樹形結構,你的代碼會控制它在哪裡停止,使用哪些數據之類的事情。就是說,SAX可控制性強,占用內存小,適用於提取部分數據。當在讀取解析過程中遇到需要處理的對象,會發出通知對其進行處理,如果XML格式在某一處出現錯誤,前面的數據會被提取出來,錯誤後面數據的就顯示不出來。

NSXMLParse類是iOS自帶的XML解析類。采用SAX方式解析數據
解析過程由NSXMLParserDelegate協議方法回調
解析過程:開始標簽->取值->結束標簽->取值
代碼的實現過程是,首先我們建立一個XML文檔,並引入文件,如下:

其次我們建立一個表格試圖控制器(TableViewController)
定義一個私有屬性數組datasource用來存儲模型數據和startTag屬性用來暫存起始標簽


同時在方法ViewDidLoad裡面獲取文件數據並指定代理//解析器協議,同時為對應的重用標識符注冊單元格的類型


NSXMLParserDelegate 解析器協議裡面有如下方法:


當XML在逐個解析文件數據時,由於起始標簽和結束標簽名字一樣,當解析到結束標簽時,為了避免解析到的結束標簽後面的內容將模型對象中的相應的屬性覆蓋,在解析結束標簽的方法內部將起始標簽置為nil


在每個方法內部我們同時打印了一下方法名,這樣我們就可以在輸出端清晰的看到方法的執行順序,
同時在表格的設置方法內部建立重建機制


在設置相應的行數和分區,我們就可以在模擬器上顯示出如下結果:


2、DOM工具解析
DOM:Document Object Model (文檔對象模型)。解析時需要將XML文件整體讀入,並且將XML結構化成樹狀,使用時再通過樹狀結構讀取相關數據,查找特定節點,然後對節點進行讀或寫。他的主要優勢是實現簡單,讀寫平衡;缺點是比較占內存,因為他要把整個xml文檔都讀入內存,文件越大,這種缺點就越明顯。當文件內容出現錯誤時,在輸入框內會標記出錯誤的位置
GDataXMLNode是Google提供的開元XML解析類,對libxml2.dylib進行了Objective-C的封裝,因此在使用GDataXML之前,你需要先導入libxml2。
iOS中包含一個C語言的動態鏈接庫libxml2.dylib,解析速度比NSXMLParser快


二、JSON數據結構

JSON數據結構基本概念
Javascript Object Notation ,輕量級的數據交換格式,采用完全獨立於語言的文本格式,被稱為理想的數據交換語言,易於人閱讀和便攜,同時也易於及其解析何程,由於JSON解析便捷、快速,並且相同數據用JSON編輯所占的內存更小,所以在iOS中我們我們使用JSON解析更加普遍。

JSON文檔有兩種結構:對象 、數據
對象:以“{“開始,以”}”結束,是“名稱/值”對兒的集合。名稱和值中間用“:”隔開。多個“名稱/值”對之間用“,”隔開。類似OC中的字典。
數組:以“["開始,以“]”結束,中間是數據。數據以“,”分割。
JSON中的數據類型:字符串、數值、BOOL、對象、數組。
例如:



JSON – OC 轉換對照表


JSON數據結構的功能
1、數據交換
2、內容管理
3、配置文件

JSON解析方案

在iOS中,JSON的常見解析方案有4種
第三方框架:JSONKit、SBJson、TouchJSON(性能從左到右,越差)
蘋果原生(自帶):NSJSONSerialization(性能最好)



下面是NSJSONSerialization解析過程:

Copyright © Linux教程網 All Rights Reserved