UI高階 資料解析(XML解析和JSON解析)

2021-07-10 21:41:25 字數 3378 閱讀 8282

ios資料解析主要有xml解析和json解析兩種方式,下面以本地資料的方式來說明這兩種方式

下面是一段簡單不完整的xml**

草哥男24

好賤男25

你妹男40

每乙個xml檔案都有一組唯一根節點,,根節點下有若干組子節點,每一組子節點又包含了三個自己的子節點(,,);

代表的是開始標籤,<>草哥<>中間的草哥代表的是標籤內容,代表的是結束標籤

對於每一對節點來說,如果<>和<>之間有內容,則代表的是這個節點包含的內容;如果<>和<>之間為空,說明這個節點包含的時\n,也就是換行符

sax解析是利用系統類nsxmlparser進行解析

// 1、 獲得檔案路徑 (第一步和第二部以後會被網路請求取代)

nsstring *filepath = [[nsbundle mainbundle]pathforresource:@"teacher" oftype:@"xml"];

// 2、 根據路徑獲取資料 (nsdata)

nsdata *data = [nsdata datawithcontentsoffile:filepath];

// 3、 建立nsxmlparser物件,進行對data的解析

nsxmlparser *parser = [[nsxmlparser alloc] initwithdata:data];

設定**,記得先遵守協議

注意sax解析必須要呼叫parse方法,否則不會去走**方法

//  必須呼叫這個方法,否則不會去走**方法

[parser parse];

根據**介面解析資料 

- (instancetype)initwithcontentsofurl:(nsurl *)url;根據本地資料解析 

- (instancetype)initwithdata:(nsdata *)data;開始進行解析 

- (bool)parse;

應用sax解析主要用到五種**方法

1、當開始解析的時候呼叫的方法(讀取到開始根節點時呼叫的方法)

- (void)parserdidstartdocument:(nsxmlparser *)parser

2、當讀取到開始標籤時候呼叫的方法

//  讀取到開始標籤時候呼叫的方法

- (void)parser:(nsxmlparser *)parser didstartelement:(nsstring *)elementname namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring *)qname attributes:(nsdictionary*)attributedict

3、當讀取到標籤內容時呼叫的方法

// 讀取到標籤內容時候呼叫的方法

- (void)parser:(nsxmlparser *)parser foundcharacters:(nsstring *)string

4、當讀取到結束標籤時呼叫的方法

//  讀取到結束標籤時候呼叫的方法

- (void)parser:(nsxmlparser *)parser didendelement:(nsstring *)elementname namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring *)qname

5、當讀取到結束解析的時候呼叫的方法

//  結束解析的時候呼叫的方法

- (void)parserdidenddocument:(nsxmlparser *)parser

dom解析是利用谷歌提供的gdataxmlnode解析

//  1、 獲取檔案路徑

nsstring *filepath = [[nsbundle mainbundle] pathforresource:@"teacher" oftype:@"xml"];

// 2、 獲取檔案中的資料

nsdata *data = [nsdata datawithcontentsoffile:filepath];

// 3、利用gdataxmldocument解析資料

gdataxmldocument *document = [[gdataxmldocument alloc] initwithdata:data options:0 error:nil]; // 用&error可以去檢視錯誤資訊

// 1.獲取所有的資訊

gdataxmlelement *rootelement = [document rootelement];

// 2、 獲取裝載所有的陣列

nsarray *childarray = [rootelement children];

//裝載model的陣列進行初始化

self.modelarray = [nsmutablearray array];

for (int i = 0; i < childarray.count; i++)

}

首先,我們在model檔案中宣告與資料原始檔中相同的屬性名

@property (nonatomic,copy)nsstring *address;

@property (nonatomic,copy)nsstring *cinemaname;

在model的.h檔案中宣告乙個方法完成對陣列的建立以及資料的解析和賦值model屬性的過程

//  在此方法內部進行陣列的建立以及資料的解析和賦值model屬性的過程,然後返回給控制器,控制器中的self.modelarray進行接收這個陣列

+ (nsmutablearray *)modelconfigurejson:(nsdictionary *)jsondic;

在model的.m中實現這個方法

+ (nsmutablearray *)modelconfigurejson:(nsdictionary *)jsondic 

return modelarray;

}

在controller類中利用系統類解析json資料

- (void)jsonwithsysytem

xml解析資料

import gdataxmlnode.h 引第三方標頭檔案 import jsonkit.h 引第三方標頭檔案 inte ce rootviewcontroller uiviewcontroller 協議 property nonatomic,retain nsmutablearray allst...

解析XML資料

其實就是已有的工具使用方法,特別白痴的做法,記住就好了。貴在實際專案中融會貫通 private void par mlwithpull string xmldata else if name equals nodename else if verson equals nodename break 解...

XML資料解析

結合網上的例子,記錄一下自己過程中的坑 建立乙個解析器物件xmlpullparser 使用xmlpullparser.setinput 方法設定解析器的輸入 通過判斷事件型別,迴圈呼叫next 方法獲得解析的資料 南寧 10 01 2982 東南風06 09 19 35 8日星期三 高溫 34 低溫...