XML與JSON解析


【XML簡介】

 

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文檔  

 

 

 

【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】

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM