iOS中xml文件解析

来源:互联网 发布:知阴三部曲多少钱一盒 编辑:程序博客网 时间:2024/05/22 02:14

xml文件内容

<?xml version="1.0" encoding="UTF-8"?><root>    <person id="1">        <name>jack</name>        <personID>2015</personID>        <age>20</age>    </person>    <person id="2">        <name>rose</name>        <personID>2016</personID>        <age>18</age>    </person>    <person id="3">        <name>tom</name>        <personID>2017</personID>        <age>19</age>    </person>    <person id="4">        <name>jerry</name>        <personID>2018</personID>        <age>21</age>    </person></root>

下面是解析用的代码以及详细的注释

#import "ViewController.h"//这个就是一个model 三个属性#import "Person.h"@interface ViewController ()<NSXMLParserDelegate>@property(nonatomic,strong)id elementObject;@property(nonatomic,strong)NSString *characterString;@property(nonatomic,strong)NSMutableArray *elements;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    [self xmlParser];}- (void)xmlParser{    self.elements=[NSMutableArray array];    //从路径获取xml文件    NSString *path=[[NSBundle mainBundle]pathForResource:@"person" ofType:@"xml"];    NSData *data=[NSData dataWithContentsOfFile:path];    NSXMLParser *parser=[[NSXMLParser alloc]initWithData:data];    parser.delegate=self;    //开始解析自动调用代理方法    [parser parse];}- (void)parserDidStartDocument:(NSXMLParser *)parser{    //开始解析}- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{    //解析到第一个元素    //判断解析到的元素是不是person  因为这个是代理方法 我们可以创建多个perser    if ([elementName isEqualToString:@"person"]) {        self.elementObject=[[Person alloc]init];    }    //解析到了元素我们在这里还看不到是什么}- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{    //查看到第一个元素的内容    NSLog(@"%@",string);    self.characterString=string;}- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{    //解析一个结束的元素节点  在xml中我们的元素存储 是以一个个元素节点存储的    NSLog(@"解析元素结束:%@",elementName);    //判断解析到哪一个结束的元素节点  当为root 证明已经解析到最后的元素节点  停止解析    if ([elementName isEqualToString:@"root"]) {        NSLog(@"解析结束");    }else if([elementName isEqualToString:@"person"]){        [self.elements addObject:self.elementObject];        //当解析到 person以下的元素节点 就是person的属性  设置上 就行了        }else        [self.elementObject setValue:self.characterString forKey:elementName];}//结束解析- (void)parserDidEndDocument:(NSXMLParser *)parser{    for (Person *per in self.elements) {        NSLog(@"%@",per.name);    }}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end
0 0
原创粉丝点击