// 新建一个空文件,后缀为.xml
<Student>
<student>
<name>张三</name>
<age>22</age>
<sex>男</sex>
<hobby>玩</hobby>
</student>
<student>
<name>李四</name>
<age>22</age>
<sex>女</sex>
<hobby>上网</hobby>
</student>
<student>
<name>王二麻子</name>
<age>21</age>
<sex>男</sex>
<hobby>学习</hobby>
</student>
<student>
<name>赵钱</name>
<age>20</age>
<sex>男</sex>
<hobby>没爱好</hobby>
</student>
</Student>
// 创建一对ParserXML文件,继承与NSObject
***Parser.h***
// 先签订NSMXLParserDelegate协议
// 用一条属性,数组来装所有解析好的model对象
@property(nonatomic, retain)NSMutableArray *array;
// 用一条字符串属性,来保存节点内容
@property (nonatomic, copy)NSString *str;
// 给一个开始解析的方法
- (void)startParser;
***ParserXMl.m***
// 实现解析方法
- (void)startParser {
// 根据文件名和类型,获取文件所在路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
// 把路径内容转换成NSData对象保存
NSData *data = [NSData dataWithContentsOfFile:path];
// 创建一个xml的解析工具
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 需要设置解析工具的代理人
parser.delegate = self;
// 开始解析
[parser parse];
}
// 开始执行协议方法
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
// 只要一碰到节点,系统就自动走这个方法
if ([elementName isEqualToString:@"Student"]) {
// 碰到根节点,需对数组进行初始化
self.array = [NSMutableArray array];
} else if ([elementName isEqualToString:@"student"]) {
// 碰到二级节点时,意味着这是一个新对象,需创建一个新对象放进数组中
Student *stu = [[Student alloc] init];
[self.array addObject:stu];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
// 找到节点内容时调用,用一条属性来保存节点内容
self.str = string;
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
// 到节点结束会走这个方法
Student *stu = [self.array lastObject];
// 通过KVC进行赋值
[stu setValue:self.str forKey:elementName];
NSLog(@"%@", self.str);
}