UI_数据结构解析

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

数据结构解析分为两类:XML解析、JSON解析。


XML解析:

XML解析又分为SAX解析、DOM解析


SAX解析:一边读取XML文档一边处理

 

1/必须继承NSXMLParserDelegate协议

2/设置XML数据,并初始化NSXMLParser

3/执行代理的三个方法


- (void)startParser

{

//获取本地XML文件的路径

 NSString*path=[[NSBundle mainBundle]pathForResource:@"StuList" ofType:@"xml"];

 

//根据文件路径获得文件中的内容

 NSData *data = [NSData dataWithContentsOfFile:path];

 NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:data] autorelease];


// 设置代理

 [parser setDelegate:self];

 

}


// 解析的时候,只要解析到了开始节点,就立刻走这个协议 将获取到的值放在数组里

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

 {

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

       Model *myModel = [[Model alloc] init];

     [_array addObject:myModel];

     [myModel release];

         

     }

 }


//找到开始标记和结束标记之间的字符时,调用这个方法。读取两节点间的具体内容

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

 {

  self.found = string;

 }


//  遇见结束标记时会调用这个方法,所以要在取值阶段把值放到属性里

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

 {

     

  Model *last = [_array lastObject];

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

 

     last.name = _found;

  }

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

 

 last.gender = _found;

 

 }

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

 

 last.age = _found;

 

 }

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

 

 }

 }


DOM解析: 读入整个XML文档并构建一个驻留内存的树结构,通过遍历树结构可以检索任意XML节点,读取它的属性和值。



- (void)domParser2

{

    NSString *path = [[NSBundle mainBundle] pathForResource:@"StuList" ofType:@"xml"];

    NSData *data = [NSData dataWithContentsOfFile:path];

//对通篇文章进行整体解析

    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:GDataXMLDocumentKind error:nil];

    

//获得根节点

    GDataXMLElement *root = [document rootElement];

    

 //获得所有的根节点下面的stulist节点的stu节点

    NSArray *array = [root nodesForXPath:@"stulist/stu" error:nil];

    


//遍历每个stu下面的节点并判断出节点名,放到相应的model属性中

    for (GDataXMLElement *ele in array) {

        Model *my = [[[Model alloc] init]autorelease];

        

//获得ele下面的所有子节点

   

        NSArray *children = [ele children];

        

        for (GDataXMLElement *child in children) {

//获得节点的名字

            NSString *name = [child localName];

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

//获得节点的值

                my.name = [child stringValue];

                

           }

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

                my.gender = [child stringValue];

           }

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

                my.age = [child stringValue];

          }

        }

    }

}



JSon解析:轻量级的数据交换格式,采用完全独立于语言的文本格式,被称为理想的数据交换语言


 1/大括号代表字典

 2/中括号代表数组

 3/冒号的左右两边分别为键和值(key:value

 4/数据和数据之间用逗号隔开


- (void)jsonParser

{

 // 读取本地文件

    NSString *path = [[NSBundle mainBundle] pathForResource:@"City" ofType:@"json"];

    NSData *data = [NSData dataWithContentsOfFile:path];

    

    NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

    

    NSDictionary *dic = [array objectAtIndex:0];

    NSString *name = [dic objectForKey:@"name"];

  

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值