iOS學習筆記 xml資料解析

2021-07-05 06:50:56 字數 2786 閱讀 6269

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

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

nsxmlparser是基於sax的解析方式。

nsxmlparser採用了委託設計模式,因此他的實現類需要採用協議並支援委託。

nsxmlparser解析xml需要委託nsxmlparserdelegate實現。

1、初始化nsxmlparser

要使用nsxmlparser要先建立它,設定各種屬性,主要用到以下幾個方法:

initwithcontentsofurl  通過nsurl建立解析器

initwithdata                 通過nsdata建立解析器

setdelegate                  為解析器定義委託

parse                           執行解析器

[cpp]view plain

copy

print?

nsxmlparser *parser=[[nsxmlparser alloc] initwithdata:[xml datausingencoding:nsutf8stringencoding]];  

nsxmlparser *parser=[[nsxmlparser alloc] initwithcontentsofurl:[nsurl urlwithstring:@""

]];  

[parser setdelegate:self];//設定nsxmlparser物件的解析方法**

[parser setshouldprocessnamespaces:no];  

[parser parse];//開始解析

2、委託方法

主要使用一下委託方法:

[cpp]view plain

copy

print?

//發現元素開始符的處理函式  (即報告元素的開始以及元素的屬性) 

- (void

)parser:(nsxmlparser *)parser   

didstartelement:(nsstring *)elementname   

namespaceuri:(nsstring *)namespaceuri   

qualifiedname:(nsstring *)qname   

attributes:(nsdictionary *)attributedict  

//處理標籤包含內容字元 (報告元素的所有或部分內容) 

- (void

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

//發現元素結束符的處理函式,儲存元素各專案資料(即報告元素的結束標記)

- (void

)parser:(nsxmlparser *)parser   

didendelement:(nsstring *)elementname   

namespaceuri:(nsstring *)namespaceuri   

qualifiedname:(nsstring *)qname  

//報告解析的結束 

- (void

)parserdidenddocument:(nsxmlparser *)parser  

//報告不可恢復的解析錯誤

- (void

)paser:parsererroroccured  

執行[parser parse]後會依序執行:

1、didstartelement 2、

foundcharacters 3、

didendelement

示例如下:

[cpp]view plain

copy

print?

-(void

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

}  if

(itemvalue!=nil)  

itemvalue=[[nsmutablestring alloc] init];  

if( [elementname isequaltostring:@

"phone"

] )   

}  - (void

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

- (void

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

if( [elementname isequaltostring:@

"person"

] )   

}  

參考:

iOS學習筆記(九) xml資料解析

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

IOS(一)XML資料解析

解析 xml 通常有兩種方式,dom 和 sax xml的資料格式 第一種 屬性在字典 data 中儲存 第二種 屬性在兩個尖括號中間1 王百惠女 110 xml解析之sax解析 sax解析是通過nsxmlparser解析的解析方式。nsxmlparser採用了委託設計模式,因此他的實現類需要採用協...

iOS之資料解析之XML解析

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