IOS 解析XML

來源:互聯網
上載者:User

      從某種意義上來說,大部分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(@"///////////////////////////////////////////////////////////////////////////");

    

}      

       

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.