博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML解析
阅读量:4490 次
发布时间:2019-06-08

本文共 2628 字,大约阅读时间需要 8 分钟。

#import "ViewController.h"

#import "Student.h"//首先需要新建一个模型,继承自NSObject的类 Student;

@interface ViewController ()<NSXMLParserDelegate> 

//声明变量

@property (nonatomic, strong) NSMutableArray *studentArray;

@property (nonatomic, strong) NSString *string;

@property (nonatomic, strong) Student *student; 

 

@end 

 

@implementation ViewController

//storyboard建立的模板,创建了一个button按钮,点击即可解析;saxBt是按钮的点击事件

- (IBAction)saxBt:(UIButton *)sender { 

    NSString *string = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];

    //字符创转换格式为url

    NSURL *url = [[NSURL alloc] initFileURLWithPath:string];

    //创建解析类NSXMLParser

    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];

   //接受解析类的代理   

    parser.delegate = self;

    //开始解析

    [parser parse];    

#pragma mark ---- 解析数据的方法------<NSXMLParserDelegate>

- (void)parserDidStartDocument:(NSXMLParser *)parser{

    NSLog(@"开始解析");

//初始化可变数组,以便存放模型

    self.studentArray = [NSMutableArray arrayWithCapacity:0];

}

- (void)parserDidEndDocument:(NSXMLParser *)parser{

    NSLog(@"结束解析"); 

//解析完成打印解析好的放在可变数组内部的模型数据 

    for (Student *student in self.studentArray) {

        NSLog(@"%@",student); //模型内部 .m 文件需要重写(- (NSString *)description;)这个方法

        }

}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict{

    NSLog(@"遇到开始标签:%@",elementName);

    if ([elementName isEqualToString:@"Student"]) {

        self.student = [[Student alloc] init];

    }

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName{

     NSLog(@"遇到结束标签:%@",elementName);

    if ([elementName isEqualToString:@"name"]) {

        self.student.name = self.string;

    }else if ([elementName isEqualToString:@"age"]){

        self.student.age = self.string;

    }else if ([elementName isEqualToString:@"gender"]){

        self.student.gender = self.string;

    }else if ([elementName isEqualToString:@"Student"]){

        [self.studentArray addObject:self.student];

    }

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    NSLog(@"遇到数据内部的内容:%@",string);

    self.string = string;

}

此解析方法速度慢,特点是逐行解析,但是优点数据内部如果有错误,错误之前的数据一样可以解析出来;这个NSXMLParser 类是有自己的方法,使用时需要接受协议并且指定代理对象

 

//XML的数据类型如下

<Students>

    <Student>

        <name>张三</name>

        <age>18</age>

        <gender>男</gender>

    </Student>

    <Student>

        <name>王五</name>

        <age>22</age>

        <gender>男</gender>

    </Student>

    <Student>

        <name>小花</name>

        <age>18</age>

        <gender>女</gender>

    </Student>

    <Student>

        <name>六六</name>

        <age>22</age>

        <gender>女</gender>

    </Student>

</Students>

 

转载于:https://www.cnblogs.com/jiurong001/p/5195091.html

你可能感兴趣的文章
jQuery插件学习笔记
查看>>
知识梳理HTML篇
查看>>
SQL关键字-exists
查看>>
每天一个linux命令(42):kill命令
查看>>
java获取当前路径的几种方法
查看>>
常用的js函数
查看>>
Unity 碰撞检测 OnTriggerEnter 入门
查看>>
利用DFS求联通块个数
查看>>
总结:
查看>>
spring boot 整合redis --sea 方式1
查看>>
Android Http请求方法汇总
查看>>
缓存技术PK:选择Memcached还是Redis?
查看>>
Laravel-lumen 配置JWT
查看>>
MySQL常用存储引擎:MyISAM与InnoDB之华山论剑
查看>>
MVC5+EF6 --自定义控制Action访问权限
查看>>
[CF786B] Legacy
查看>>
Spring 注解@Component,@Service,@Controller,@Repository
查看>>
设置RDLC中table控件的表头在每页显示
查看>>
linux中tomcat内存溢出解决办法 分类: 测试 ...
查看>>
jQuery $.each用法
查看>>