zoukankan      html  css  js  c++  java
  • iOS GET、POST数据解析

        在实际开发中,JSON数据解析更简单易行,一般均使用json数据解析,因此,程序猿们请务必和后台搞好关系,让他给你json数据。

       XML解析:

        ios SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选:TBXML、TouchXML、KissXML、TinyXML和GDataXML。

    解析XML通常有两种方式:DOM和SAX

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

       SAX解析XML时,是基于事件通知的模式,一边读取XML文档一边处理,不必等整个文档加载完之后才采取操作,当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理。

    NSXMLParser:

    举个栗子:

    <rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> 头标签,里面的xmlns,可以看成是属性
    <channel>
    <title>呵呵呵呵</title>

    -(BOOL)parser:(NSString*)string
    {
        //系统自带的
            NSXMLParser *par = [[[NSXMLParser alloc] initWithData:[string dataUsingEncoding:NSUTF8StringEncoding]]autorelease];
            [par setDelegate:self];//设置NSXMLParser对象的解析方法代理  
            return [par parse];//调用代理解析NSXMLParser对象,看解析是否成功   }
    
    }
    
    #pragma mark xmlparser
    //step 1 :准备解析
    - (void)parserDidStartDocument:(NSXMLParser *)parser
    {
    //    NSLog(@"%@",NSStringFromSelector(_cmd) );
     
    }
    //step 2:准备解析节点
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
    {
    //    NSLog(@"%@",NSStringFromSelector(_cmd) );
    }
    //step 3:获取首尾节点间内容
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
        NSLog(@"%@",NSStringFromSelector(_cmd) );
    }
    
    //step 4 :解析完当前节点
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
    {
       NSLog(@"%@",NSStringFromSelector(_cmd) );
    }
    
    //step 5;解析结束
    - (void)parserDidEndDocument:(NSXMLParser *)parser
    {
    //    NSLog(@"%@",NSStringFromSelector(_cmd) );
    }
    //获取cdata块数据
    - (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
    {
    //    NSLog(@"%@",NSStringFromSelector(_cmd) );
    }

    这里解释下GDataXML:

    GDaraXML:这时一套Google开发得DOM方式解析XML类库,支持读取和修改XML文档,支持XPath方式查询。

    安装说明:

    1. 从http://code.google.com/p/gdata-objectivec-client/downloads/list下载“gdata-objective-c client library.”

    2. 解压缩文件,找到SourceXMLSupport,并且将其中的GDataXMLNode.h 和 GDataXMLNode.m文件拖到项目中

    3. 选中项目,选中“Build Settings”标签页

    4. 将Build Settings页中,顶部的“Basic”标签切换到“All”

    5. 找到“PathsHeader Search Paths”项,并添加“/usr/include/libxml2”到列表中

    6. 找到“LinkingOther Linker Flags”项,并添加“-lxml2”到列表中,

    在需要调用GDataXML的代码文件头部,加入:

    #import “GDataXMLNode.h”

    解析DOM文档对象示例:

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];

    NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:filePath];

    NSError *error;

    GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];

    if (doc == nil) { return nil; }

    NSLog(@"%@", doc.rootElement);

    [doc release];

    [xmlData release];

    JSON解析:

      NSString * urlStr = [NSString stringWithFormat:@"http://121.40.54.251:80/HandheldKitchen/api/more/hotwater!getHotwaterList.do?id=%lu&page=1&pageRecord=12&is_traditional=0",(long)_iid];
        NSURL * url = [NSURL URLWithString:urlStr];   
        NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];    
        request.HTTPMethod = @"GET";   
        [self.detailsSourceArray removeAllObjects];    
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {     
        if (data) {        
         NSMutableDictionary * dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];       
          NSMutableArray * array = [dic valueForKey:@"data"];           
      for (NSMutableDictionary * dic in array) {                
                     _right = [[RightModel alloc]init];            
                     [_right setValuesForKeysWithDictionary:dic];                                                                                                                          [self.detailsSourceArray addObject:_right];            
         [_right release];          
       }            
           }];
    

      

      

  • 相关阅读:
    剑指offer[19]——顺时针打印矩阵
    剑指offer[17]——树的子结构
    剑指offer[16]——合并两个排序的链表
    剑指offer[15]——反转链表
    剑指offer[14]——链表中倒数第k个结点
    剑指offer[13]——调整数组顺序使奇数位于偶数前面
    剑指offer[12]——数值的整数次方
    剑指offer[11]——二进制中1的个数
    剑指offer[10]——矩形覆盖
    linux的基本命令
  • 原文地址:https://www.cnblogs.com/shaoting/p/4872757.html
Copyright © 2011-2022 走看看