NSXMLParser解析XML

 1 // 解析XML分SAX和DOM解析两种方式:NSXMLParser是系统自带的SAX解析方式,解析步骤如下
 2 -(void)start
 3 {
 4     NSString* path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"xml"];
 5     
 6     NSURL *url = [NSURL fileURLWithPath:path];
 7    
 8     // 1.根据文件地址创建解析器
 9     NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
10     
11     // 2.设置解析器代理
12     parser.delegate = self;
13     
14     // 3.开始解析
15     [parser parse];
16     NSLog(@"解析完成...");
17 }
18 
19 /**
20  *  文档开始的时候触发
21  */
22 - (void)parserDidStartDocument:(NSXMLParser *)parser
23 {
24     _notes = [NSMutableArray new];
25 }
26 
27 /**
28  *  文档出错的时候触发
29  */
30 - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
31 {
32     NSLog(@"%@",parseError);
33 }
34 
35 /**
36  *  遇到一个开始标签时候触发,,elementName是元素,qualifiedName是限定名,attributeDict是属性
37  */
38 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
40  qualifiedName:(NSString *)qualifiedName  attributes:(NSDictionary *)attributeDict
42 {
43     _currentTagName = elementName;
44     if ([_currentTagName isEqualToString:@"Note"]) {
45         NSString *_id = [attributeDict objectForKey:@"id"];
46         NSMutableDictionary *dict = [NSMutableDictionary new];
47         [dict setObject:_id forKey:@"id"];
48         [_notes addObject:dict];
49     }
50     
51 }
52 
53 /**
54  *  遇到字符串时候触发
55  */
56 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
57 {
58     // 替换string的回车符和空格
59     string =[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
60     if ([string isEqualToString:@""]) {
61         return;
62     }
63     NSMutableDictionary *dict = [_notes lastObject];
64     
65     if ([_currentTagName isEqualToString:@"CDate"] && dict) {
66         [dict setObject:string forKey:@"CDate"];
67     }
68     
69     if ([_currentTagName isEqualToString:@"Content"] && dict) {
70         [dict setObject:string forKey:@"Content"];
71     }
72     
73     if ([_currentTagName isEqualToString:@"UserID"] && dict) {
74         [dict setObject:string forKey:@"UserID"];
75     }
76 }
77 
78 /**
79  *  /遇到结束标签时候出发
80  *
81  */
82 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
83  qualifiedName:(NSString *)qName;
84 {
85     self.currentTagName = nil;
86 }
87 /**
88  *  遇到文档结束时候触发
89  */
90 - (void)parserDidEndDocument:(NSXMLParser *)parser
91 {
92     [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadViewNotification" object:self.notes userInfo:nil];
93     self.notes = nil;
94 }


 

posted @ 2014-06-29 17:12  delegate  阅读(352)  评论(0)    收藏  举报