IOS成長之路-解析xml資料

來源:互聯網
上載者:User

需要解析的 xml 資料:

<?xml version="1.0" encoding="UTF-8"?><Data><Movie><title>good lucky to you</title><box>111</box>        <summary>This is a story</summary></Movie>    <Movie><title>hello</title><box>99</box>        <summary>oh,yes</summary></Movie>        <Movie><title>who am i</title><box>22</box>        <summary>chenglong</summary></Movie></Data>

通過 上上篇的部落格《擷取網路資料》 中描述的過程和程式我們可以得到網路上的資料,還可以在這個過程中把資料傳遞給進行解析資料的方法進行解析的操作,

//自訂一個 PraxMovie 方法,參數時NSDate型的資料,用來傳遞接受到的資料- (void)PraxMovie:(NSData*)_data {    //NSXMLParser解析xml格式的資料,在這裡初始化,並賦值NSXMLParser* parser = [[NSXMLParser alloc]initWithData:_data];parser.delegate = self;[parser parse];}

在解析之前我們要進行清空以前的資料,因為在運行程式的過程中我們有時候會運行多次,所以要刪除舊的資料

(注意: 在這個程式中,我們用到了 Movie 和 MovieList 這兩個類,Movie中存放的是三個屬性[電影名稱,票房,介紹],用來存放解析 xml 後得到的三個資料,

                 而 MovieList 類中定義了 一個可以改變的數組,用來存放 Movie 對象,並實現增加,刪除,和查詢數組中的 Movie對象的數量 等方法)

//解析前的準備- (void)parserDidStartDocument:(NSXMLParser *)parser{    //移出所有,對MovieList 類中的數組清空    MovieList *xmlMovielist;[self.xmlMovielist.moviearray removeAllObjects];[self.tempString setString:@""];}

查詢所有的節點,並得到每一個節點中的資料

//查詢節點,同時alloc 出一個Movie對象 ,用於儲存資料- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName   namespaceURI:(NSString *)namespaceURI  qualifiedName:(NSString *)qualifiedNameattributes:(NSDictionary *)attributeDict{if([elementName isEqualToString:@"Movie"]){self.newwMovie = nil;self.newwMovie= [[Movie alloc] init];[self.tempString setString:@""];}else{[self.tempString setString:@""];}}//找到節點資料,通過NSString對象來傳遞- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{if(![string isEqualToString:@""]){[self.tempString appendString:string];}}

然後把得到得得 節點 進行區分,並把得到得相應資料 存放到不同得 Movie屬性 中

//根據查詢到的節點,儲存資料- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName   namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{if([elementName isEqualToString:@"Movie"]){        //存放到數組中[self.xmlMovielist Addmovie:self.newwMovie];        }else if([elementName isEqualToString:@"title"]){        //Movie 得title 屬性self.newwMovie.title =[NSString stringWithString:self.tempString];}else if([elementName isEqualToString:@"box"]){        // Movie boxOfficeGross 屬性int temp = [[NSString stringWithString:self.tempString]intValue];self.newwMovie.boxOfficeGross = [NSNumber numberWithInt:temp];}else if([elementName isEqualToString:@"summary"]){        //Movie 得 summary 屬性self.newwMovie.summary =[NSString stringWithString:self.tempString];}}

當解析完最後一個節點後,解析結束,

//解析結束- (void)parserDidEndDocument:(NSXMLParser *)parser{    //遍曆數組,輸出每一個節點資料    for (id tmp in self.xmlMovielist.moviearray)    {        NSLog(@"tmp = %@",tmp);    }     self.newwMovie = nil;self.tempString = nil;}

解析得過程:

        先執行查詢節點的方法,然後執行得到節點中的資料的方法,接下來執行 區分節點進行儲存資料 ,

<--------------------------

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 

  namespaceURI:(NSString *)namespaceURI 

 qualifiedName:(NSString *)qualifiedName

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.