对下图XML文件进行解析:
person.xml
可以把这个XML数据的根目录看做是一个数组,数组里存放了4个叫person的字典(这四个对象通过id来区分),字典里有三个键值对(name、personID、age)
1.解析XML文件前的准备:
(1)要实现 <NSXMLParserDelegate>协议。
(2)实现几个代理方法:
//1.开始解析
-(void)parserDidStartDocument:(NSXMLParser *)parser
//2.解析到一个元素
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
//3.查看到一个元素的内容
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
//4.解析节点结束
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
(3)创建一个model类,用来接收上图中四个对象(看做是四个对象person1、person2、person3、person4)
2.开始解析XML文件
第一步:获取xml文件
NSString *path = [[NSBundle mainBundle]pathForResource:@"person" ofType:@"xml”]; //xml文件路径
NSData *data = [NSData dataWithContentsOfFile:path]; //通过xml文件路径获取xml中的数据
NSXMLParser *xml = [[NSXMLParser alloc]initWithData:data];
xml.delegate = self; //当前类实现xml的代理
[xml parse];//开始解析
第二步:实现几个代理方法
//1.开始解析
-(void)parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@"开始解析");
}
//2.解析到一个元素(节点)
<root>、 <person id="1”> 、 <name> 这些都被称为节点。
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
NSLog(@"解析到一个节点:%@",elementName);
if ([elementName isEqualToString:@"person"]) {
_model = [[Model alloc]init];
}
}
//3.查看到一个元素的内容(节点和斜杠节点之间的内容jack) <name>jack</name>
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"查看到一个元素的内容:%@",string);
_str = string;
}
//4.解析节点结束 遇到带斜杠的节点(</name>),会进入这个方法
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
NSLog(@"该节点结束解析:%@",elementName);
if ([elementName isEqualToString:@"root"]) { // 遇到</root> 节点
NSLog(@"The End");
}else if ([elementName isEqualToString:@"person"]){
// 遇到</person>节点
//一组数据结束(本xml文件一共四组)
[_array addObject:_model]; //一个model对象被添加到数组
}else{
// 遇到</name> </personID> </age>节点,说明已经读取到name、 personID 或者age的数据 _str了,在这里用KVC给model对象赋值
//elementName = name、 personID 或者age
[_model setValue:_str forKey:elementName]; //用KVC给model对象赋值
}
}
打印结果:
2016-01-23 10:17:09.115 1.22 xml数据存储[1118:30883] 开始解析
2016-01-23 10:17:09.115 1.22 xml数据存储[1118:30883] 解析到一个节点:root
2016-01-23 10:17:09.116 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.116 1.22 xml数据存储[1118:30883] 解析到一个节点:person
2016-01-23 10:17:09.116 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.116 1.22 xml数据存储[1118:30883] 解析到一个节点:name
2016-01-23 10:17:09.116 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:jack
2016-01-23 10:17:09.116 1.22 xml数据存储[1118:30883] 该节点结束解析:name
2016-01-23 10:17:09.117 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.117 1.22 xml数据存储[1118:30883] 解析到一个节点:personID
2016-01-23 10:17:09.117 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:2015
2016-01-23 10:17:09.117 1.22 xml数据存储[1118:30883] 该节点结束解析:personID
2016-01-23 10:17:09.117 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.117 1.22 xml数据存储[1118:30883] 解析到一个节点:age
2016-01-23 10:17:09.118 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:20
2016-01-23 10:17:09.118 1.22 xml数据存储[1118:30883] 该节点结束解析:age
2016-01-23 10:17:09.118 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.118 1.22 xml数据存储[1118:30883] 该节点结束解析:person
2016-01-23 10:17:09.183 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.184 1.22 xml数据存储[1118:30883] 解析到一个节点:person
2016-01-23 10:17:09.184 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.184 1.22 xml数据存储[1118:30883] 解析到一个节点:name
2016-01-23 10:17:09.184 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:rose
2016-01-23 10:17:09.184 1.22 xml数据存储[1118:30883] 该节点结束解析:name
2016-01-23 10:17:09.184 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.185 1.22 xml数据存储[1118:30883] 解析到一个节点:personID
2016-01-23 10:17:09.185 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:2016
2016-01-23 10:17:09.185 1.22 xml数据存储[1118:30883] 该节点结束解析:personID
2016-01-23 10:17:09.185 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.185 1.22 xml数据存储[1118:30883] 解析到一个节点:age
2016-01-23 10:17:09.185 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:18
2016-01-23 10:17:09.185 1.22 xml数据存储[1118:30883] 该节点结束解析:age
2016-01-23 10:17:09.186 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.186 1.22 xml数据存储[1118:30883] 该节点结束解析:person
2016-01-23 10:17:09.212 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.212 1.22 xml数据存储[1118:30883] 解析到一个节点:person
2016-01-23 10:17:09.212 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.212 1.22 xml数据存储[1118:30883] 解析到一个节点:name
2016-01-23 10:17:09.213 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:tom
2016-01-23 10:17:09.213 1.22 xml数据存储[1118:30883] 该节点结束解析:name
2016-01-23 10:17:09.213 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.213 1.22 xml数据存储[1118:30883] 解析到一个节点:personID
2016-01-23 10:17:09.213 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:2017
2016-01-23 10:17:09.213 1.22 xml数据存储[1118:30883] 该节点结束解析:personID
2016-01-23 10:17:09.214 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.214 1.22 xml数据存储[1118:30883] 解析到一个节点:age
2016-01-23 10:17:09.214 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:19
2016-01-23 10:17:09.214 1.22 xml数据存储[1118:30883] 该节点结束解析:age
2016-01-23 10:17:09.214 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.214 1.22 xml数据存储[1118:30883] 该节点结束解析:person
2016-01-23 10:17:09.214 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.215 1.22 xml数据存储[1118:30883] 解析到一个节点:person
2016-01-23 10:17:09.313 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.314 1.22 xml数据存储[1118:30883] 解析到一个节点:name
2016-01-23 10:17:09.314 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:jerry
2016-01-23 10:17:09.314 1.22 xml数据存储[1118:30883] 该节点结束解析:name
2016-01-23 10:17:09.314 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.314 1.22 xml数据存储[1118:30883] 解析到一个节点:personID
2016-01-23 10:17:09.314 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:2018
2016-01-23 10:17:09.315 1.22 xml数据存储[1118:30883] 该节点结束解析:personID
2016-01-23 10:17:09.315 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.315 1.22 xml数据存储[1118:30883] 解析到一个节点:age
2016-01-23 10:17:09.315 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:21
2016-01-23 10:17:09.315 1.22 xml数据存储[1118:30883] 该节点结束解析:age
2016-01-23 10:17:09.316 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.316 1.22 xml数据存储[1118:30883] 该节点结束解析:person
2016-01-23 10:17:09.316 1.22 xml数据存储[1118:30883] 查看到一个元素的内容:
2016-01-23 10:17:09.316 1.22 xml数据存储[1118:30883] 该节点结束解析:root
2016-01-23 10:17:09.317 1.22 xml数据存储[1118:30883] The End