欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
NSXMLParser具體解析xml的應用詳解

有關(guān)NSXMLParser解析類(lèi)庫的基本論述,可查看相關(guān)SDK幫助,以下僅僅是具體的應用操作。是以一個(gè)圖書(shū)庫應用為例,其Books.xml文檔結構如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <Books>
3 <Book id="1">
4 <title>Circumference</title>
5 <author>Nicholas Nicastro</author>
6 <summary>Eratosthenes and the Ancient</summary>
7 </Book>
8 <Book id="2">
9 <title>Copernicus Secret</title>
10 <author>Jack Repcheck</author>
11 <summary>How the scientific revolution began</summary>
12 </Book>
13 <Book id="3">
14 <title>Angels and Demons</title>
15 <author>Dan Brown</author>
16 <summary>Robert Langdon is summoned to a Swiss</summary>
17 </Book>
18 </Books>

從其文檔結構我們可以看出,要定義一個(gè)Book實(shí)體類(lèi)描述具體的書(shū)籍信息,其中用于存儲的相關(guān)xml文檔元素的實(shí)例變量與對應元素同名(本例:title、author、summary),另外還有個(gè)bookID實(shí)例變量存儲Book元素標簽的屬性id值。具體Book實(shí)體類(lèi)的定義如下:

 1 // Book.h
2 #import <UIKit/UIKit.h>
3 @interface Book:NSObject {
4 NSInteger bookID;
5 NSString *title;
6 NSString *author;
7 NSString *summary;
8 }
9
10 @property (nonatomic, readwrite) NSInteger bookID;
11 @property (nonatomic, retain) NSString *title;
12 @property (nonatomic, retain) NSString *author;
13 @property (nonatomic, retain) NSString *summary;
14
15 @end
16
17 //Book.m
18 #import "Book.h"
19 @implementation Book
20 @synthesize title,author,summary,bookID;
21
22 - (void)dealloc {
23 [summary release];
24 [author release];
25 [title release];
26 [super dealloc];
27 }
28 @end

由于例子中的xml文檔結構表明會(huì )有很多書(shū)籍,即Book實(shí)體類(lèi)的實(shí)例對象會(huì )有很多。所以我們要在應用程序中聲明一個(gè)可變數組來(lái)存儲這些信息,如下代碼表明:在應用程序委托類(lèi)中聲明了一個(gè)可變數組books。

// AppDelegate.h
@interface AppDelegate : NSObject <UIApplicationDelegate> {
//默認缺省的實(shí)例變量

NSMutableArray *books;
}
//默認缺省的屬性定義

@property (nonatomic, retain) NSMutableArray *books;
@end

為了代碼的清晰,我們可以再聲明一個(gè)代理類(lèi)XMLParser,在當NSXMLParser實(shí)例對象指定委托時(shí)會(huì )用到。

// XMLParser.h
#import <UIKit/UIKit.h>

@class AppDelegate, Book;
@interface XMLParser : NSObject {
NSMutableString *currentElementValue; //用于存儲元素標簽的值
AppDelegate *appDelegate;
Book *aBook; //書(shū)籍實(shí)例
}

- (XMLParser *)initXMLParser; //構造器
@end
// XMLParser.m
- (XMLParser *)initXMLParser {
[super init];
appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
return self;
}

這整個(gè)XMLParser類(lèi)的實(shí)現代碼如下:

 1 //XMLParser.m
2 #import "XMLParser.h"
3 #import "XMLAppDelegate.h"
4 #import "Book.h"
5
6 @implementation XMLParser
7
8 - (XMLParser *) initXMLParser {
9
10 [super init];
11
12 appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];
13
14 return self;
15 }
16
17 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
18 namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
19 attributes:(NSDictionary *)attributeDict {
20
21 if([elementName isEqualToString:@"Books"]) {
22 //Initialize the array.
23 //在這里初始化用于存儲最終解析結果的數組變量,我們是在當遇到Books根元素時(shí)才開(kāi)始初始化,有關(guān)此初始化過(guò)程也可以在parserDidStartDocument 方法中實(shí)現
24 appDelegate.books = [[NSMutableArray alloc] init];
25 }
26 else if([elementName isEqualToString:@"Book"]) {
27
28 //Initialize the book.
29 //當碰到Book元素時(shí),初始化用于存儲Book信息的實(shí)例對象aBook
30 aBook = [[Book alloc] init];
31
32 //Extract the attribute here.
33 //從attributeDict字典中讀取Book元素的屬性
34 aBook.bookID = [[attributeDict objectForKey:@"id"] integerValue];
35
36 NSLog(@"Reading id value :%i", aBook.bookID);
37 }
38
39 NSLog(@"Processing Element: %@", elementName);
40 }
41 /* 可以看出parser:didStartElement:namespaceURI:qualifiedName:attributes方法實(shí)現的就是在解析元素開(kāi)始標簽時(shí),進(jìn)行一些初始化流程 */
42
43 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
44 // 當用于存儲當前元素的值是空時(shí),則先用值進(jìn)行初始化賦值
45 // 否則就直接追加信息
46 if(!currentElementValue)
47 currentElementValue = [[NSMutableString alloc] initWithString:string];
48 else
49 [currentElementValue appendString:string];
50
51 NSLog(@"Processing Value: %@", currentElementValue);
52
53 }
54
55 // 這里才是真正完成整個(gè)解析并保存數據的最終結果的地方
56 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
57 namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
58
59 if([elementName isEqualToString:@"Books"])
60 return;
61
62 //There is nothing to do if we encounter the Books element here.
63 //If we encounter the Book element howevere, we want to add the book object to the array 遇到Book元素的結束標簽,則添加book對象到設置好的數組中。
64 // and release the object.
65 if([elementName isEqualToString:@"Book"]) {
66 [appDelegate.books addObject:aBook];
67
68 [aBook release];
69 aBook = nil;
70 }
71 else
72 // 不是Book元素時(shí)也不是根元素,則用 setValue:forKey為當前book對象的屬性賦值
73 [aBook setValue:currentElementValue forKey:elementName];
74
75 [currentElementValue release];
76 currentElementValue = nil;
77 }
78
79 - (void) dealloc {
80
81 [aBook release];
82 [currentElementValue release];
83 [super dealloc];
84 }
85
86 @end


NSXMLParser 實(shí)現的是sax方法解析xml文件。
dom實(shí)現的原理是把整個(gè)xml文檔一次性讀出,放在一個(gè)樹(shù)型結構里。在需要的時(shí)候,查找特定節點(diǎn),然后對節點(diǎn)進(jìn)行讀或寫(xiě)。他的主要優(yōu)勢是實(shí)現簡(jiǎn)單,讀寫(xiě)平衡;缺點(diǎn)是比較占內存,因為他要把整個(gè)xml文檔都讀入內存,文件越大,這種缺點(diǎn)就越明顯。
sax的實(shí)現方法和dom不同。他只在xml文檔中查找特定條件的內容,并且只提取需要的內容。這樣做占用內存小,靈活,正好滿(mǎn)足我們的需求。他的缺點(diǎn)就是寫(xiě),有些資料介紹了寫(xiě)入的方法,但是我感覺(jué)這對本例沒(méi)有必要。
運行NSXMLParser涉及設置、運行和響應結果。
1)啟動(dòng)NSXMLParser 
要使用NSXMLParser要先創(chuàng )建它,設置各種屬性,主要用到以下幾個(gè)方法:
initWithContentsOfURL 通過(guò)NSURL創(chuàng )建解析器
initWithData 通過(guò)NSData創(chuàng )建解析器
setDelegate 為解析器定義委托
parse 運行解析器
2)充當委托
最重要的5個(gè)方法: 
//發(fā)現元素開(kāi)始符的處理函數  (即報告元素的開(kāi)始以及元素的屬性) 
- (void)parser:(NSXMLParser *)parser 
        didStartElement:(NSString *)elementName 
        namespaceURI:(NSString *)namespaceURI 
        qualifiedName:(NSString *)qName 
        attributes:(NSDictionary *)attributeDict
//處理標簽包含內容字符 (報告元素的所有或部分內容) 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
//發(fā)現元素結束符的處理函數,保存元素各項目數據(即報告元素的結束標記)
- (void)parser:(NSXMLParser *)parser 
        didEndElement:(NSString *)elementName 
        namespaceURI:(NSString *)namespaceURI 
        qualifiedName:(NSString *)qName
//報告解析的結束
- (void)parserDidEndDocument:(NSXMLParser *)parser
//報告不可恢復的解析錯誤
- (void)paser:parserErrorOccured

只要沒(méi)有碰到文檔結束符,解析器會(huì )一而再,再而三的不斷呼叫此三個(gè)回調函數進(jìn)行循環(huán):開(kāi)始初始化book對象并讀取有關(guān)元素屬性,讀取子元素和設置它們的值給實(shí)體對象,最后不斷將實(shí)體對象添加到數組中保存。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
NSXMLParser [iPhone]XML文件解析 parsing-xml-files NSXMLParser
Xml解析
IOS 中的XML解析
IOS開(kāi)發(fā)系列之xml解析阿堂教程(1)
簡(jiǎn)介Objective-C解析XML與JSON數據格式的方法
在J2ME開(kāi)發(fā)中解析XML(1)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久