關於iOS解析XML使用NSXMLParser和GDataXML不得不說的一些事
- NSXMLParser
最近剛學習iOS,需要解析一個XML如下:http://wthrcdn.etouch.cn/WeatherApi?citykey=101050101,最開始選擇使用自帶的NSXMLParser,首先,NSXMLParser必須繼承NSXMLParserDelegate協議
@interface ... : ... <NSXMLParserDelegate>
然後就是要初始化啦,
- (void)viewDidLoad {
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];//設定XML資料
[parser setDelegate:self];
[parser parse];
}
(1)遍例xml的節點,是所有的節點
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
}
(2)當xml節點有值時,則進入,用來取出<a></a>
之間的值
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
}
(3)當遇到結束標記時,進入,用來儲存上述(2)取得值,
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
}
在遍歷結束前,會反覆執行上述三個方法,但是在解析的過程中,出現了一個問題,就是數字和文字分離的情況,比如,2級,解析的結果是2和級而不是2級,最終也沒弄明白事什麼原因,隨後又換了GDataXML,就沒有這個問題了。
2.GDataXML
GDataXMLNode是Google提供的用於XML資料處理的類集。該類集對libxml2–DOM處理方式進行了封裝,能對較小或中等的xml文件進行讀寫操作且支援XPath語法。
(1)獲取GDataXMLNode.h/m檔案,將GDataXMLNode.h/m檔案新增到工程中
(2)工程中增加“libxml2.dylib”庫
(3)在工程的“Build Settings”頁中找到“Header Search Path”項,新增/usr/include/libxml2”到路徑中,在Linking中找到 Other Linker Flags 對應的值改為:-lxml2。
(4)新增“GDataXMLNode.h”檔案到標頭檔案中
首先,初始化GDataXMLDocument,在定義根元素,以及根元素下一層的孩子元素
- (void)viewDidLoad
{
NSString *path = [NSString stringWithFormat:@"http://wthrcdn.etouch.cn/WeatherApi?citykey=101050101"];
NSURL *url = [[NSURL alloc] initWithString:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
GDataXMLDocument *xmlDoc = [[GDataXMLDocument alloc] initWithData:urlData options:0 error:nil];
GDataXMLElement *xmlEle = [xmlDoc rootElement]; //根元素 resp
NSArray *array = [xmlEle children];//孩子元素city,updatetime...
[self parseXml:array];
}
然後就是層層迴圈巢狀的過程啦
-(void) parseXml:(NSArray *)array
{
for (int i = 0; i<[array count]; i++) {
GDataXMLElement *ele = [array objectAtIndex:i];
if([[ele name] isEqualToString:@"city"])
...
else if ([[ele name] isEqualToString:@"forecast"]) {
GDataXMLDocument *weatherxml = [[GDataXMLDocument alloc]initWithRootElement:ele];
GDataXMLElement *weatherxmlele = [weatherxml rootElement];//根元素 forecast
NSArray *weatherarray = [weatherxmlele children];//孩子元素 weather
for(int j = 0;j<[weatherarray count];j++)
}
}
}
GDataXML的方式很容易理解,就是在不停巢狀的時候對跟和孩子不要弄暈就好啦!本人才疏學淺,有不對的地方還忘批評指正!
版權宣告:本文為博主原創文章,未經博主允許不得轉載。
相關文章
- 關於xml解析XML
- 關於程式碼評審(CodeReview)那些不得不說的事兒View
- 關於React Hooks,你不得不知的事ReactHook
- 關於DOCTYPE的使用和說明
- 畢玄:我在阿里這十年,關於開源不得不說的事阿里
- iOS – XML解析iOSXML
- iOS - XML解析iOSXML
- 關於清華的白痴和某些所謂的IT人,我不得不說的話
- 關於博彩門事件的一些看法和自己的一些事事件
- 關於SAX解析xml檔案的問題XML
- 說說在 Spring 中,如何基於 XML 來配置事務SpringXML
- 關於資料庫事務和鎖的一些分析資料庫
- 二分查詢不得不說的事
- UIview 與 UIviewController 不得不說的"事"UIViewController
- 關於GCD開發的一些事GC
- 關於原型設計的一些事原型
- iOS關於換膚和夜間模式的一些思考iOS模式
- 關於微服務架構,你不得不知道的事微服務架構
- 關於Python程式語言不得不說的優缺點!Python
- 關於事務的英文說明 Transaction OverviewView
- 關於XML字串和XML Document之間的轉換薦XML字串
- Deep和Cross不得不說的秘密ROS
- iOS企業版分發關於plist和證書的那些事iOS
- 說說IOS內購那些事iOS
- android 關於關於子執行緒更新UI的一些事Android執行緒UI
- js中關於base64的一些事JS
- JS 中關於 base64 的一些事JS
- 請教高手關於解析xml檔案的問題 急~~XML
- 有關jdom解析xmlXML
- 我和Linux,不得不說的故事Linux
- Deep和Cross不得不說的祕密ROS
- iOS-UITableViewCell的一些事iOSUIView
- 關於COMMIT和ROLLBACK語句的使用注意事項MIT
- 使用jdom解析XMLXML
- iOS 關於 GIF 圖片那點事iOS
- 關於一些變數的使用變數
- C語言與C++不得不說的那點事C語言C++
- IOS 學習之XML解析(一)iOSXML