iOS中xml文件解析

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章