在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...