Senior進階 網(wǎng)絡(luò)之?dāng)?shù)據(jù)解析
一、解析的基本概念
1.解析:從事先規(guī)定好的格式中提取數(shù)據(jù)
2.解析的前提:提前約定好格式,數(shù)據(jù)提供方按照格式提供數(shù)據(jù)、數(shù)據(jù)獲取方則按照格式獲取數(shù)據(jù)
3.iOS開發(fā)常見的解析:XML解析、JSON解析
二、XML數(shù)據(jù)結(jié)構(gòu)
1.XML:Extensible Markup Language (可擴展標(biāo)記語言),主流數(shù)據(jù)格式之一,可以用來存儲和傳輸數(shù)據(jù)。
2.XML數(shù)據(jù)格式的功能:數(shù)據(jù)交換、內(nèi)容管理、用作配置文件。(目前的用法是用作配置文件和格式布局)
3.XML數(shù)據(jù)結(jié)構(gòu)的語法
1.聲明
2.節(jié)點節(jié)點使用一對標(biāo)簽表示:起始和結(jié)束標(biāo)簽
3.根節(jié)點是起始節(jié)點,只有一個,節(jié)點可以嵌套
4.節(jié)點可以有值,存儲在一對子標(biāo)簽中
SAX的優(yōu)勢:
1.基于事件驅(qū)動的解析方式,
2.逐行解析
3.它只讀不可寫(只能解析讀取)
4.如果是大型數(shù)據(jù),推薦使用SAX解析,是因為逐行解析,效率高
三、進行XML數(shù)據(jù)結(jié)構(gòu)解析時使用到的SAX工具,DOM工具
1.SAX解析:Simple API for XML。基于事件驅(qū)動的解析方式,逐行解析數(shù)據(jù)。(采用協(xié)議回調(diào)機制)
2.NSXMLParser類
1.NSXMLParser是iOS自帶的XML解析類,采用SAX方式解析數(shù)據(jù)
2.解析過程由NSXMLParserDelegate協(xié)議方法回調(diào)
3.解析過程:開始標(biāo)簽 --> 取值 --> 結(jié)束標(biāo)簽 --> 取值
3.NSXMLParser的初始化、和設(shè)置的相關(guān)屬性、方法
1.initWithContentsOfURL: ----- 通過NSURL創(chuàng)建解析器
2.initWithData: ----- 通過NSData創(chuàng)建解析器
3.setDelegate: -----為解析器定義委托
4.parse: ----- 運行解析器
4.NSXMLParserDelegate協(xié)議方法
1.parserDidStartDocument: ----- 報告解析的開始
2.parser:didStartElement:namespaceURI:qualifiedName:attributes: ----- 發(fā)現(xiàn)標(biāo)簽開始的處理函數(shù)(即報告元素的開始以及元素的屬性)
3.parser:foundCharacters: ----- 處理標(biāo)簽包含內(nèi)容字符 (報告標(biāo)簽的所有或部分內(nèi)容)
4.parser:didEndElement:namespaceURI:qualifiedName: ----- 發(fā)現(xiàn)標(biāo)簽結(jié)束符的處理函數(shù),保存標(biāo)簽各項數(shù)據(jù)(即報告標(biāo)簽的結(jié)束標(biāo)記)
5.parserDidEndDocumentp: ----- 報告解析的結(jié)束
6.parser:parserErrorOccurred: ----- 報告不可恢復(fù)的解析錯誤
四、進行XML數(shù)據(jù)結(jié)構(gòu)解析時使用到的DOM工具
1.DOM:Document Object Model (文檔對象模型)。DOM方式解析XML時,讀入整個XML文檔并構(gòu)建一個駐留內(nèi)存的樹結(jié)構(gòu) (節(jié)點樹),通過遍歷樹結(jié)構(gòu)可以檢索任意XML節(jié)點,讀取它的屬性和值。而且通常情況下,可以借助XPath,直接查詢XML節(jié)點
2.GDataXMLNode
1.采用DOM方式解析數(shù)據(jù)
2.iOS中包含一個C語言的動態(tài)鏈接庫libxml2.dylib(xcode7以后改為libxml2.tbd),解析速度比NSXMLParser快。
3.GDataXMLNode是Google提供的開源XML解析類,對libxml2.tbd進行了Objective-C的封裝,能對較小或中等的xml文檔進行讀寫操作且支持XPath語法。
3.GDataXMLNode使用方法
1.獲取GDataXMLNode.h/m文件,將GDataXMLNode.h/m文件添加到工程中
2.向工程中增加"libxml2.dylib"動態(tài)庫
3.在工程的"Build Settings"頁中找到"Header Search Path"項,添加"/usr/include/libxml2".
4.導(dǎo)入"GDataXMLNode.h"文件到頭文件中,如工程能編譯通過,則說明GDataXMLNode添加成功。
4.GDataXMLElement類的方法
1.name ----- 獲取標(biāo)簽名
2.attributeForName ----- 獲取屬性節(jié)點
3.stringValue ----- 獲取標(biāo)簽間的字符串值
4.rootElement ----- 根節(jié)點
五、JSON數(shù)據(jù)結(jié)構(gòu)
1.JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。JSON采用完全獨立于語言的文本格式,易于閱讀和編寫,同時也易于機器解析和生成。
2.JSON數(shù)據(jù)結(jié)構(gòu)的語法
1.JSON文件有兩種結(jié)構(gòu)
對象:"名稱/值"對的集合。不同的語言中,它被理解為對象,記錄,結(jié)構(gòu),字典,哈希表,有鍵列表,或者關(guān)聯(lián)數(shù)組。以"{"開始,以"}"結(jié)束,是"名稱/值"對的集合。名稱和值中間用":"隔開。多個"名稱/值"對之間用","隔開
數(shù)組:值的有序列表。zai'da'bu'fen'yu'yan'zhong在大部分語言中,它被理解為數(shù)組。以"[",yi以"]"結(jié)束,中間是數(shù)據(jù)。數(shù)據(jù)以","分隔。
3.JSON的數(shù)據(jù)類型:字符型、數(shù)值、BOOL、對象、數(shù)組
4.JSON數(shù)據(jù)結(jié)構(gòu)的功能;數(shù)據(jù)交換、內(nèi)容管理、配置文件(和XML基本一樣)
六、使用Foundation進行JSON解析
1.NSJSONSerialization
NSJSONSerialization里面包含了兩個方法來通過不同數(shù)據(jù)形式解析JSON數(shù)據(jù)
1.JSONObjectWithData:options:error: ----- 使用緩沖區(qū)數(shù)據(jù)解析JSON
2.writeJSONObject:toStream:options:error: ----- 使用文件流的形式解析JSON
七、XML與JSON兩種數(shù)據(jù)結(jié)構(gòu)的優(yōu)缺點
1.XML的優(yōu)缺點:
1.優(yōu)點:
1.格式統(tǒng)一,符合標(biāo)準(zhǔn)
2.容易與其它系統(tǒng)進行遠程交互,數(shù)據(jù)共享比較方便
2.缺點:
1.XML文件格式文件龐大,格式復(fù)雜,傳輸占用帶寬
2.服務(wù)器端和客戶端都需要花費大量代碼來解析XML,不論服務(wù)端還是客戶端都使代碼變得異常復(fù)雜和不容易維護
3.客戶端不同瀏覽器只見解析XML的方式不一致,需要重復(fù)編寫很多代碼
4.服務(wù)端和客戶端解析XML花費資源和時間。
2.JSON優(yōu)缺點:
1.優(yōu)點:
1.數(shù)據(jù)格式比較簡單,易于讀寫,格式都是壓縮的,占用帶寬小
2.易于解析這種語言
3.支持多種語言,包括ActionScript、C、C#、ColdFusion、Java、JavaScript、Perl、PHP、Python、Ruby等語言服務(wù)器端語言,便于服務(wù)器端的解析
4.因為JSON格式能夠直接為服務(wù)器端代碼使用,大大簡化了服務(wù)器端和客戶端的代碼開發(fā)量,但是完成的任務(wù)不變,且易于維護
2.缺點:
1.沒有XML格式這么推廣的深入人心和使用廣泛,沒有XML那么通用性
2.JSON格式目前在Web Service推廣還屬于初級階段
總結(jié)
1.數(shù)據(jù)解析:從某種格式的數(shù)據(jù)中提取自己所需要的數(shù)據(jù)
2.主流的數(shù)據(jù)交換格式有兩種:XML和JSON
3.XML解析分為兩種:SAX解析和DOM解析
4.XNL解析工具:NSXMLParser、GDataXMLNode、TochXML和KissXML等
5.JSON解析工具:JSONKit、NSJSONSerialization、TouchJSON和SBJSON等,其中NSJSONSerialization是系統(tǒng)提供的解析類,其解析效率是最高的
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。