ios 解析json,xml

來源:互聯網
上載者:User

標籤:

一、發送使用者名稱和密碼給伺服器(走HTTP協議)


    // 建立一個URL : 請求路徑
    NSString *urlStr = [NSString stringWithFormat:@"http://localhost:8080/MJServer/login?username=%@&pwd=%@",usernameText, pwdText];
    NSURL *url = [NSURL URLWithString:urlStr];
    
    // 建立一個請求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSLog(@"begin---");
    
    // 發送一個同步請求(在主線程發送請求)
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    
    // 解析伺服器返回的JSON資料
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
    NSString *error = dict[@"error"];
    if (error) {
        // {"error":"使用者名稱不存在"}
        // {"error":"密碼不正確"}
        [MBProgressHUD showError:error];
    } else {
        // {"success":"登入成功"}
        NSString *success = dict[@"success"];
        [MBProgressHUD showSuccess:success];
    }

 

 

 
二、載入伺服器最新的視頻資訊json
    // 1.建立URL
    NSURL *url = HMUrl(@"video");
    
    // 2.建立請求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 3.發送請求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError || data == nil) {
            [MBProgressHUD showError:@"網路繁忙,請稍後再試!"];
            return;
        }
        
        // 解析JSON資料
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        NSArray *videoArray = dict[@"videos"];
        for (NSDictionary *videoDict in videoArray) {
            HMVideo *video = [HMVideo videoWithDict:videoDict];
            [self.videos addObject:video];
        }
        
        // 重新整理表格
        [self.tableView reloadData];
    }];

 


三、 載入伺服器最新的視頻資訊XML

    
    // 1.建立URL
    NSURL *url = HMUrl(@"video?type=XML");
    
    // 2.建立請求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 3.發送請求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError || data == nil) {
            [MBProgressHUD showError:@"網路繁忙,請稍後再試!"];
            return;
        }
        
        // 解析XML資料
        
        // 載入整個XML資料
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
        
        // 獲得文檔的根項目 -- videos元素
        GDataXMLElement *root = doc.rootElement;
        
        // 獲得根項目裡面的所有video元素
        NSArray *elements = [root elementsForName:@"video"];
        
        // 遍曆所有的video元素
        for (GDataXMLElement *videoElement in elements) {
            HMVideo *video = [[HMVideo alloc] init];
            
            // 取出元素的屬性
            video.id = [videoElement attributeForName:@"id"].stringValue.intValue;
            video.length = [videoElement attributeForName:@"length"].stringValue.intValue;
            video.name = [videoElement attributeForName:@"name"].stringValue;
            video.image = [videoElement attributeForName:@"image"].stringValue;
            video.url = [videoElement attributeForName:@"url"].stringValue;
            
            // 添加到數組中
            [self.videos addObject:video];
        }
        
        // 重新整理表格
        [self.tableView reloadData];
    }];

 

四、XML

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    /**
     載入伺服器最新的視頻資訊
     */
    
    // 1.建立URL
    NSURL *url = HMUrl(@"video?type=XML");
    
    // 2.建立請求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 3.發送請求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError || data == nil) {
            [MBProgressHUD showError:@"網路繁忙,請稍後再試!"];
            return;
        }
        
        // 解析XML資料
        
        // 1.建立XML解析器 -- SAX -- 逐個元素往下解析
        NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
        
        // 2.設定代理
        parser.delegate = self;
        
        // 3.開始解析(同步執行)
        [parser parse];
        
        // 4.重新整理表格
        [self.tableView reloadData];
    }];
}

#pragma mark - NSXMLParser的代理方法
/**
 *  解析到文檔的開頭時會調用
 */
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
//    NSLog(@"parserDidStartDocument----");
}

/**
 *  解析到一個元素的開始就會調用
 *
 *  @param elementName   元素名稱
 *  @param attributeDict 屬性字典
 */
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([@"videos" isEqualToString:elementName]) return;
    
    HMVideo *video = [HMVideo videoWithDict:attributeDict];
    [self.videos addObject:video];
}

/**
 *  解析到一個元素的結束就會調用
 *
 *  @param elementName   元素名稱
 */
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
//    NSLog(@"didEndElement----%@", elementName);
}

/**
 *  解析到文檔的結尾時會調用(解析結束)
 */
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
//    NSLog(@"parserDidEndDocument----");
}

#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.videos.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"video";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    
    HMVideo *video = self.videos[indexPath.row];
    
    cell.textLabel.text = video.name;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"時間長度 : %d 分鐘", video.length];
    
    // 顯示視頻
    NSURL *url = HMUrl(video.image);
    [cell.imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placehoder"]];
    
    return cell;
}

 

 

 

ios 解析json,xml

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.