• JSON解析和XML解析


    一、 XML:用到一个开源解析类,GDataXMLNode(将其加入项目中),添加libxml2.dylib框架

            经常用到的方法:

    1.- (id)initWithXMLString:(NSString *)str options:(unsigned int)mask error:(NSError *)error

    2.- (id)initWithData:(NSData *)data options:(unsigned int)mask error:(NSError *)error

    这两个方法可以将NSString类型或者NSData类的数据转化为GDataXMLNode类可以解析的XML文档 

      3.- (GDataXMLElement *)rootElement 返回GDataXMLElement中所有节点信息

    4.- (NSArray *)elementsForName:(NSString *)name   返回当前节点下名称为name的所有节点,返回值为数组。

    5.- (NSString *)stringValue 返回节点中间的值。

    二、 JSON:用到开源的框架SBJSON,对NSString类的扩展,我们程序中的所有NSString对象都可以调用其中的方法。

     SBJSON的方法- (id)JSONValue 此方法返回一个ID类对象,因为JSON信息都是以键值来传输的,所以我们会用NSDictionary来接收这个返回值。

    两种结构:

    1.“键值对”的集合。对象(object),记录(Record),结构(struct),字典(dictionary),哈希表(hashtable),键列表(keyed list),关联数组(associative array)。

    2.值的有序列表。数组(Array)。 

    JSON解析
    1大括号代表字典
    2中括号(小括号)代表数组
    3冒号的左右两边分别为键和值(key:value)
    4数据和数据之间用逗号隔开

    我们在本机上创建一个file.xml,进行解析,并取出年龄35
    JSON解析和XML解析

    //JSON解析
       本地读取student.xml文件
        NSString *jstr=[NSString stringWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"File" ofType:@"json"] encoding:NSUTF8StringEncoding error:nil];//取到路径
        //进行解析,因为最外面是字典,所以要用字典类型的对象来接
        NSDictionary *dic=[jstr JSONFragmentValue];
        //下面取值
        //取到hello这个key,取到的是数组里的内容所以要用数组来接
        NSArray *arr=[dic objectForKey:@"hello"];
        //取到下标为1的数组,因为数组里面又是一个字典,所以用字典来接
        NSDictionary *dic2=[arr objectAtIndex:1];
       //取到字典key为age的value,因为取出来的值是字符串,用字符串来接
        NSString *jage=[dic2 objectForKey:@"age"];
        //输出取出的age
        NSLog(@"%@",jage);
    //XML解析
    同样我们也在本地创建一个File.xml的文件里面包含:
    <students>
        <student>
            <name>kellen</name>
            <age>25</age>
            <sex>M</sex>
        </student>
        <student>
            <name>jack</name>
            <age>35</age>
            <sex>M</sex>
        </student>
    </students>

        //step1:本地读取student.xml文件
        //获取目录的xml文件
        NSString*xmlPath=[[NSBundle mainBundle]pathForResource:@"File" ofType:@"xml"];
        NSData*xmlData=[[NSData alloc]initWithContentsOfFile:xmlPath];
        //step2:将包含xml内容的字符串转化为document对象
       
        GDataXMLDocument*xmldoc=[[GDataXMLDocument alloc]initWithData:xmlData options:0 error:nil];
       
        //step3:获取到根节点
        //获取根节点(students)
        GDataXMLElement*rootElement=[xmldoc rootElement];
       
        //step4:遍历节点信息
        //获取根节点下的节点(student)
        NSArray*students=[rootElement elementsForName:@"student"];
        NSLog(@"%@",students);
        //使用forin遍历XML中的所有数据
        for (GDataXMLElement*stu in students) {
            //获取name节点的属性
            GDataXMLElement*nameElement=[[stu elementsForName:@"name"]objectAtIndex:0];
            NSString*name=[nameElement stringValue];//获取nameElement
            NSLog(@"Student name is:%@",name);
            //获取age节点的属性
            GDataXMLElement*ageElement=[[stu elementsForName:@"age"]objectAtIndex:0];
            NSString*age=[ageElement stringValue];
            NSLog(@"User age is :%@",age);
        }
    }

  • 相关阅读:
    基于WINCE6.0+S3C2443的camera驱动
    WINCE下基于SL031的RFID功能的实现
    WINCE6.0+S3C2443下的activesync问题
    WINCE6.0+S3C2443下WatchDog学习
    错误的抉择,痛悔
    WINCE5.0下SQL server compact版本更新
    做生意和打工的区别
    WINCE基于MC8630的3G模块的控制和加载
    Xml Tips
    VB.NET and C# Comparison
  • 原文地址:https://www.cnblogs.com/Peak-Banish/p/4060708.html
Copyright © 2020-2023  润新知