XML文件的解析和json的解析

解析就是从事先规定好的格式中提取数据

XML的解析方式有两种 SAX解析 DCM解析(安卓有一个PULL)


SAX解析:

NSString *path = [[NSBundle mainBundle] pathForResource:@"Message" ofType:@"txt"];

NSData *data = [NSData dataWithContentsOfFile:path];
开始解析

1 创建解析对象 绑定数据

NSXMLParser *parse = [[NSXMLParser alloc] initWithData:data];

2 指定代理 记得要引入代理<NSXMLParserDelegate>

parse.delegate = self;

3 开始解析

[parse parse];

// 开始解析文档的方法

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

// 开始解析解析标签的方法

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

// 解析中间数据项

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

// 结束解析标签

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

// 结束解析文档

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

当文件书写错误的时候可以调用这个方法来查看

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{      };

DOM解析:

拿到解析数据

NSString *path = [[NSBundle mainBundle] pathForResource:@"Message" ofType:@"txt"];

NSData *data = [NSData dataWithContentsOfFile:path];

创建解析对象

 GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];

拿到根节点

 GDataXMLElement *root = doc.rootElement;

// 拿到子节点
    NSArray *modelArray = root.children;

// 初始化data数组
    self.data = [NSMutableArray array];

// 遍历数组取到每一个model对应的节点

for (GDataXMLElement *modelEle in modelArray) {
        Person *p = [[Person alloc] init];
    // 获得属性节点数组
        NSArray *proArray = modelEle.children;
        for (GDataXMLElement *proEle in proArray) {
            [p setValue:proEle.stringValue forKey:proEle.name];
        }
        [self.data addObject:p];

}
使用系统提供的类进行json解析

 NSString *path = [[NSBundle mainBundle] pathForResource:@"Json" ofType:@"txt"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    //
    NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    self.data = [NSMutableArray array];
    for (NSDictionary *dic in array) {
        Person *p = [[Person alloc] init];
        [p setValuesForKeysWithDictionary:dic];
        [self.data addObject:p];

}

使用 jsonkit 进行json解析: 需要引入jsonkit文件

NSString *path = [[NSBundle mainBundle] pathForResource:@"Json" ofType:@"txt"];
    NSData *data1 = [NSData dataWithContentsOfFile:path];
    //
    NSArray *array = [data1 objectFromJSONData];
    // 初始化数组
    self.data = [NSMutableArray array];
    // 遍历数组
    for (NSDictionary *dic in array) {
        Person *p = [[Person alloc] init];
        [p setValuesForKeysWithDictionary:dic];
        [self.data addObject:p];
  }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值