IOS(一)XML資料解析

2021-06-20 16:20:42 字數 2768 閱讀 8859

解析 xml 通常有兩種方式,dom 和 sax:

xml的資料格式:

第一種: 屬性在字典「data」中儲存

第二種: 屬性在兩個尖括號中間
1

王百惠女

110

xml解析之sax解析:

sax解析是通過nsxmlparser解析的解析方式。nsxmlparser採用了委託設計模式,因此他的實現類需要採用協議並支援委託。nsxmlparser解析xml需要遵循nsxmlparserdelegate協議。

簡單地說,sax解析就是從頭到尾的逐行讀取文件,通過協議判斷讀取到值時採取操作,順序是先讀取頭標籤在讀取結束標籤。這樣就可以取到標籤所對應的值了。下面我們來看一下實現這樣功能的主要**:

-(void)startparser

準備工作,將xml檔案匯入工程,在開始解析之前,我們要先獲取它的位址,並初始化乙個,要遵循協議,我們就是通過這個協議中的方法,來解析資料以獲取xml中的值。

//獲取內容

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

//標籤名

static nsstring * kstudent = @"student";

static nsstring * knumber = @"number";

//協議 開始解析

- (void)parser:(nsxmlparser *)parser didstartelement:(nsstring *)elementname

namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring *)qname attributes:

(nsdictionary *)attributedict

}//協議 解析結束 賦值

- (void)parser:(nsxmlparser *)parser didendelement:(nsstring *)elementname

namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring *)qnameif ([elementname isequaltostring:kname]) if ([elementname isequaltostring:kstudents])

}

這三個是nsxmlparserdelegate的內容,也是我們用來解析的最關鍵的3個協議,分別對應xml中的乙個屬性和兩個element。當xml的格式為前面所說的第一種時,我們取值也可以省略幾步,直接在- (void)parser:(nsxmlparser *)parser didstartelement:(nsstring *)elementname namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring

*)qname attributes:(nsdictionary *)attributedict{}這個協議中獲取 ,因為你要的資訊就再第乙個標籤內,最後只要判斷最後乙個資料的節點名就可以了。標籤是為了方便,避免element的名字混淆。

而當乙個資料的屬性過多時,而且在另外的類中使用,對我們傳值來說就困難了,所以我們一般會將乙個資料的各種屬性寫成乙個model,再將所有的model加到乙個陣列中,通過陣列儲存。

若是要傳值(controller之間),在sax解析中 ,我們是通過自己寫協議來實現的。如下:

#import @protocol saxxmlparserdelegate;

@inte***ce saxxmlparser : nsobject@property(nonatomic,assign) id delegate;

@end

@protocol saxxmlparserdelegate -(void)sendmessagetorootwitharr:(nsarray *)array;

@end

xml解析之dom解析:

下面我們來看看dom解析是如何的乙個過程吧。

-(void)domparser

//獲得節點名

gdataxmlelement * root = [document rootelement];

//根據子節點 獲得子節點陣列

nsarray * arr = [root elementsforname:@"student"];

//獲得根節點

nsstring * str = [root name];

nslog(@"%@",str);

for (gdataxmlelement * element in arr)

}}

這裡我們引用了gdataxmlnode第三方類。

同樣,通過位址找到document,再獲得根節點,根據資料的結構,一次層級的取得下一級的節點,一直取到一整個model的屬性的節點時,將這幾個節點的內容放到model裡面(通過遍歷的方法),最後的乙個或者若干個陣列(本例中只有乙個陣列),裡面包含了乙個個的model,而這些,就是我們解析出來的資料。要注意管理迴圈內的記憶體管理,model在**要初始化,在**不用,請參考上例。以上是我對於xml解析的一點理解,希望能夠幫到大家。以後會陸續更新。。。

iOS之資料解析之XML解析

xml解析常見的兩種方式 dom解析和sax解析 dom解析 解析 如下 void xmldommethed nslog self sourcearray 寫入 如下 通過dom解析方式為xml增加節點 sax只可以讀取,不可以新增 void domaddnote sax解析 遵循協議 inte c...

iOS 網路資料之XML解析

向伺服器請求資料,那麼資料必須以某個特定的格式存放,然後一方把資料按這種格式組織起來,另一方按相同的方式把資料解析數來,就像是我們人之間講話交流,我們的話會轉變成振動 在空氣中傳播 然後對方的耳朵感受這種振動,然後把振動轉化為話,所以我認為格式的組織是為了更好的傳遞資料。一般網路資料會封裝成兩種格式...

iOS學習筆記 xml資料解析

在iphone開發中,xml的解析有很多選擇,ios sdk提供了nsxmlparser和libxml2兩個類庫,另外還有很多第三方類庫可選,例如tbxml touchxml kissxml tinyxml和gdataxml。這篇文章使用了nsxmlparser。解析 xml 通常有兩種方式,dom...