本文以解析本地XML为例,网络获取到的返回值只需转换成NSData型,解析是同理
需要解析的xml文件如下,users.xml
01 | <?xml version= "1.0" encoding= "UTF-8" ?> |
03 | <message>用户信息</message> |
07 | <school>JiangSu University</school> |
12 | <school>NanJing University</school> |
17 | <school>HongKong University</school> |
我们用一个数组来存放,最终数据结构为
08 | school = "JiangSu University" ; |
13 | school = "NanJing University" ; |
18 | school = "HongKong University" ; |
解析步骤
一、声明代理 NSXMLParserDelegate
二、解析
02 | NSArray *keyElements = [[NSArray alloc] initWithObjects:@ "message" ,@ "user" , nil]; |
04 | NSArray *rootElements = [[NSArray alloc] initWithObjects:@ "message" ,@ "name" ,@ "age" ,@ "school" , nil]; |
06 | NSString *xmlPath = [[NSBundle mainBundle] pathForResource:@ "users" ofType:@ "xml" ]; |
08 | NSData *data = [[NSData alloc] initWithContentsOfFile:xmlPath]; |
11 | NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data]; |
14 | xmlParser.delegate = self; |
16 | BOOL flag = [xmlParser parse]; |
中间变量,在.m的interface的中定义
1 | NSString *currentElement; |
3 | NSString *currentValue; |
5 | NSMutableDictionary *rootDic; |
7 | NSMutableArray *finalArray; |
代理方法
02 | -( void )parserDidStartDocument:(NSXMLParser *)parser |
05 | finalArray = [[NSMutableArray alloc] init]; |
10 | -( void )parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict |
12 | for (NSString *key in self.keyElements){ |
13 | if ([elementName isEqualToString:key]) { |
17 | rootDic = [[NSMutableDictionary alloc] initWithCapacity:0]; |
21 | for (NSString *element in self.rootElements){ |
22 | if ([element isEqualToString:element]) { |
23 | currentElement = elementName; |
24 | currentValue = [NSString string]; |
33 | -( void )parser:(NSXMLParser *)parser foundCharacters:(NSString *)string |
38 | currentValue = string; |
39 | [rootDic setObject:string forKey:currentElement]; |
44 | -( void )parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName |
47 | [rootDic setObject:currentValue forKey:currentElement]; |
51 | for (NSString *key in self.keyElements){ |
53 | if ([elementName isEqualToString:key]) { |
57 | [finalArray addObject:rootDic]; |
63 | -( void )parserDidEndDocument:(NSXMLParser *)parser |
解析完成后,打印出finalArray为
02 | message = "\U7528\U6237\U4fe1\U606f" ; |
06 | name = "\U82b3\U4ed4\U5c0f\U811a\U5370" ; |
07 | school = "JiangSu University" ; |
11 | name = "\U6bd2\U866b" ; |
12 | school = "NanJing University" ; |
16 | name = "\U5973\U795e" ; |
17 | school = "HongKong University" ; |