UI_XML&JSON

Day 15

XML

Student.xml

<?xml version ="1.0" encoding="UTF-8" ?>
<students>
    <student>
        <name>gold one</name>
        <age>74</age>
        <gender>mu</gender>
    </student>
    <student>
        <name>gold two</name>
        <age>73</age>
        <gender>gong</gender>
    </student>
    <student>
        <name>gold three</name>
        <age>67</age>
        <gender>mu</gender>
    </student>
</students>

SAX:
1. 容错性
2. 逐行读取,不一次性获取全部
3. 可以控制过程
4. (基于事件驱动的)

DOM:
1. 全部读取
2. 写起来方便
3. 将XML结构化成树状

sax解析
XMLViewController.m

#pragma mark - sax解析方式
- (IBAction)saxButtonAction:(UIButton *)sender
{
    // 1. 获取文件路径
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    // 2. 使用NSData去接受
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    NSLog(@"%@", data);

    // 3. 创建解析对象
    NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:data] autorelease];
    // 3.1 设置代理
    parser.delegate = self;

    // 4. 开始解析
    [parser parse];  
}
#pragma mark 开始解析文档
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    // 1. 创建数组
    self.allDataArray = [NSMutableArray array];
}


#pragma mark 开始解析标签
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    // 2. 保存当前标签
    _currentElementStr = elementName;
    // 3. 判断当前标签是否属Stedent
    if ([elementName isEqualToString:@"student"]) {
        // 创建并添加
        Student *stu = [[Student new] autorelease];
        [_allDataArray addObject:stu];
    }
}


#pragma mark 获取值
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    // 4. 获取接受值的对象
    Student *stu = _allDataArray.lastObject;

    if ([_currentElementStr isEqualToString:@"name"]) {
        stu.name = string;
    } else if([_currentElementStr isEqualToString:@"age"]) {

        stu.age = string;
    } else if ([_currentElementStr isEqualToString:@"gender"]) {
        stu.gender = string;
    }
}


#pragma mark 结束解析标签
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    _currentElementStr = nil;
}

#pragma mark 结束解析文档
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"%@", _allDataArray);
}

dom解析

- (IBAction)domButtonAction:(UIButton *)sender
{
    // 1. 获取路径
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    // 2. 获取数据
    NSData *data = [NSData dataWithContentsOfFile:filePath];

    // 3. 创建解析对象
    GDataXMLDocument *document = [[[GDataXMLDocument alloc] initWithData:data options:0 error:nil] autorelease];

    // 4. 获取根节点
    GDataXMLElement *rootElement = document.rootElement;

    // 5. 创建大数组
    self.allDataArray = [NSMutableArray array];

    // 6. 遍历根节点下的所有子节点
    for (GDataXMLElement *stuElement in rootElement.children) {
        // 7. 有多少个student节点,就创建多少个stu对象
        Student *stu = [Student new];
        // 8. 遍历student节点下的子节点
        for (GDataXMLElement *subStuElement in stuElement.children) {

            // 9. 通过KVC的方式将name/age/gender节点中的值赋给stu对象
            [stu setValue:subStuElement.stringValue forKey:subStuElement.name];
        }
        // 10. 将创建好的stu添加到大数组中
        [_allDataArray addObject:stu];
        [stu release];
    }
    // 11. 打印值
    NSLog(@"%@", _allDataArray);

}

JSON

(十分之九)

Student.json

[
 {
 "name":"jinyi",
 "age":12,
 "gender":"ci"
 },
 {
 "name":"jinwu",
 "age":17,
 "gender":"xiong"
 },
 {
 "name":"qinshu",
 "age":12,
 "gender":"男"
 }
]

JSONViewController.m

- (IBAction)systemButtonAction:(UIButton *)sender
{
    // 1. 获取路径
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student.json" ofType:nil];
    // 2. 获取数据
    NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];

    // 3. 解析
    NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"%@", arr);
}

jsonKit

#pragma mark 第三方
- (IBAction)otherButtonAction:(UIButton *)sender
{
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student.json" ofType:nil];
    NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];

    NSArray *resultDict = [data objectFromJSONData];

    // 4.转化成json格式
    NSString *jsonStr = [resultDict JSONString];


    NSLog(@"%@", resultDict);
    NSLog(@"%@", jsonStr);   
}

JSON & XML 的区别

  1. JSON占用空间少
  2. XML易读,JSON不易读
  3. 对于解析来说,JSON的难度为0
  4. JSON轻量级,也是最常用的一种格式
  5. XML特点是标签,没有类型,全都是字符串
  6. JSON有:数组、对象、字符串、数字、BOOL。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值