在AFN中使用NSXMLParser解析服务器返回的XML数据

2016-08-22  本文已影响436人  西门丨不吹雪

服务器返回的XML格式:


因为苹果没有提供直接获取xml开始标签和结束标签中间的字符串,虽然提供了
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
这个方法获取中间的字符串,但是这个字符串包含了空格和回车,所以要在这个方法中进行过滤。

源代码如下:
#import "RecommendController.h"
11 #import "SPHTTPRequestTool.h"
13 #import "UIImageView+WebCache.h"
14 @interface RecommendController ()<NSXMLParserDelegate>
15
16 @property (nonatomic, strong)NSMutableArray *items;
17
18 @property (nonatomic, strong)NSMutableDictionary *itemDict;
19
20 @property (nonatomic, strong)NSMutableArray *itemArray;
21
22 @property (nonatomic, copy)NSString *itemName; // 记录标签名
23
24 @end
25
26 @implementation RecommendController
37 - (void)viewDidLoad
38 {
39 [super viewDidLoad];
46 [self loadNewRecommend];
47 self.tableView.delegate = self;
48 self.tableView.dataSource = self;
49 }
50
51 - (void)loadNewRecommend
52 {
53
54 NSDictionary *dict = [NSDictionary dictionary];
55 [SPHTTPRequestTool GET:@"http://jackgo.cn/jackgo/lab/v1.3/getitems.php?refresh=1&&earliest= (null)" params:dict success:^(NSXMLParser *parser) {
56 // 2.设置代理
57 parser.delegate = self;
58
59 // 3.开始解析
60 [parser parse]; // 卡住(解析完毕才会返回)
61
62 [self.tableView reloadData];
63 } failure:^(NSError error) {
64 SPLog(@"%@",error);
65 }];
66
67 }
68
69 - (void)parserDidStartDocument:(NSXMLParser )parser
70 {
71 SPLog(@"parser = %@", parser);
72 }
73
74
75 /

76 * 解析到一个元素的开头时调用 <items>
77 */
78 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
79 {
80
81 if ([@"items" isEqualToString:elementName]) { // 解析到一个items标签
82 self.items = [NSMutableArray array];
83 } else if ([@"item" isEqualToString:elementName]) { // 解析到一个item标签, 创建一个模型
84
85 if (self.itemDict != nil && self.itemArray != nil) {
86 [self.itemArray addObject:self.itemDict];
87 [self.items addObject:self.itemArray];
88 SPLog(@"%@", self.itemDict);
89 }
90
93 self.itemArray = [NSMutableArray array];
94 self.itemDict = [NSMutableDictionary dictionary];
95 }else
96 self.itemName = elementName;
97 }
98 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
99 {
100 if([string isEqualToString:@"\n"] || [string isEqualToString:@" "] || [string isEqualToString:@"\n\n"]) return;
105 self.itemDict[self.itemName] = string;
106
107 }
123 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
124 {
125 #warning Potentially incomplete method implementation.
126
127 return 1;
128 }
129
130 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
131 {135 return self.items.count;
136 }
137
138
139 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
140 {
142 UITableViewCell *cell = [[UITableViewCell alloc] init];
147 NSArray *array = self.items[indexPath.row];
148 NSDictionary *dict = [array lastObject];
149 cell.textLabel.text = dict[@"intro"];
150 cell.textLabel.numberOfLines = 0;
151 [cell.imageView setImageWithURL:dict[@"picurl"] placeholderImage:[UIImage imageNamed:@"error"]];
152
153 return cell;
154 }
155
156 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
157 {
158 return 70;
159 }
210
211 @end

如果报错:可能原因

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init];
 manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; // 返回XML时,这句话不写,会报错。
Paste_Image.png
上一篇下一篇

猜你喜欢

热点阅读