從某種意義上來說,大部分IOS應用都需要通過某種方式與遠程WEB伺服器通訊.廢話不多說,接下來簡單介紹以下XML和JSON解析,僅供參考,如有錯誤,請指正,謝謝
一 XML解析
1 SAX解析器,SAX是一種串流解析器,它逐句遍曆整個XML文檔,通過回掉函數返回解析後的資料.而且大部分SAX解析器接受一個URL參數,解析完目標資料就將返回.例如,NSXMLParser類有個名為initWithContentsOfURL:的方法:
(id)initWithContentsOfURL:(NSURL *)url;
只需要使用URL來初始化一個解析器,NSXMLParser會處理餘下的事情.通過回調NSXMLParserDelegate中定義的委託方法返回解析過的資料.常用的方法有:
#pragma mark - NSXMLParserDelegate
方法
- (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
{
}
由於解析器使用委託返回資料,每一個需要處理的對象都需要有一個實現NSXMLParserDelegate的NSObject子類,與DOM相比,這樣會使代碼不夠簡潔. 那麼什麼是DOM解析器呢?請繼續看 2 DOM解析器,DOM解析器顧名思義,也是一個解析器,與SAX不同的是,DOM解析器先把整個XML文檔載入到記憶體中才開始解析.DOM解析器的優勢是可以使用XPath查詢訪問隨機資料,也不需要SAX模型一樣使用委託. Mac OS X SDK中的NSXMLDocument是一個基於Objective-C的DOM解析器,而IOS則沒有內建雨OC的DOM解析器.但是可以使用libxml2,或者第三方的OC封裝器,比如基於libxml2的KissXML, TouchXML和GDataXML.這裡主要介紹Google的GDataXML
-
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
/************** GDataMXL解析 *****************/
//擷取工程目錄的xml檔案
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"users" ofType:@"xml"];
NSData *xmlData = [[NSData alloc]initWithContentsOfFile:filePath];
//使用NSData初始化對象
GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:xmlData options:0 error:nil];
//擷取根節點
GDataXMLElement *rootElement = [doc rootElement];
//擷取根節點下面的節點
NSArray *users = [rootElement elementsForName:@"user"];
for(GDataXMLElement *user in users){
NSLog(@"*********************************************************************");
//User節點的id屬性
NSString *userId = [[user attributeForName:@"id"]stringValue];
NSLog(@"User id is :%@",userId);
//擷取name節點的值
GDataXMLElement *nameElement = [[user elementsForName:@"name"] objectAtIndex:0];
NSLog(@"Name is:%@",[nameElement stringValue]);
//擷取age節點的值
GDataXMLElement *ageElement = [[user elementsForName:@"age"] objectAtIndex:0];
NSLog(@"Age is:%@",[ageElement stringValue]);
NSLog(@"*********************************************************************");
}
NSLog(@"///////////////////////////////////////////////////////////////////////////");
NSLog(@"///////////////////////////////////////////////////////////////////////////");
}