zoukankan      html  css  js  c++  java
  • 在iOS 开发中用GDataXML(DOM方式)解析xml文件

    因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的。我们需要做如下配置:

    当配置玩这个操作之后,再次进行编译的时候,系统还是报错,是因为我们还需要进行如下操作:

    //
    //  ViewController.m
    //  04-xml解析GDataXML(DOM方式)
    //
    //  Created by jerry on 15/9/29.
    //  Copyright (c) 2015年 jerry. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "GDataXMLNode.h"
    #import "Video.h"
    @interface ViewController ()
    @property(nonatomic,strong)NSMutableArray *videos;
    @end
    
    @implementation ViewController
    -(NSMutableArray *)videos
    {
        if (_videos ==nil) {
            _videos = [NSMutableArray array];
        }
        return _videos;
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
         // 1.URL
        NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/videos.xml"];
        
        // 2.send request
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        
        // 3.connection
        [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
             // 将xml 整个文件读入内存,对应的就是GDataXMLDocument 对象
            GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data error:NULL];
            // 对应的是 videos
    //        NSLog(@"%@",document.rootElement.children);
            for (GDataXMLElement *element in document.rootElement.children) {
                // 对应的是video对象,所以就在这里创建video对象
    //            NSLog(@"%@",element);
                Video *video = [[Video alloc] init];
                // 这个遍历  就是取出video对象对应的所有属性
                for (GDataXMLElement *node in element.children) {
                    //  拿到所有的值,对应的是每一个属性
    //                NSLog(@"%@----%@",node.name,node.stringValue);
                    
                    [video setValue:node.stringValue forKeyPath:node.name];
                }
                // 跟踪属性
    //            NSLog(@"%@",element.attributes);
                // 遍历element.attributes 数组,拿到属性值
                for (GDataXMLNode *att in element.attributes) {
                    // kvc 进行赋值
                    [video setValue:att.stringValue forKeyPath:att.name];
                }
                // 模型添加到一个数组
                [self.videos addObject:video];
            }
            NSLog(@"搞定。。。%@",self.videos);
        }];
    }
    
    @end

    video.h

    #import <Foundation/Foundation.h>
    
    @interface Video : NSObject
    
    @property (nonatomic, copy) NSNumber *videoId;
    @property (nonatomic, copy) NSString *name;
    @property (nonatomic, copy) NSNumber *length;
    @property (nonatomic, copy) NSString *videoURL;
    @property (nonatomic, copy) NSString *imageURL;
    @property (nonatomic, copy) NSString *desc;
    @property (nonatomic, copy) NSString *teacher;
    
    @property (nonatomic, readonly) NSString *time;
    
    - (instancetype)initWithDict:(NSDictionary *)dict;
    + (instancetype)videoWithDict:(NSDictionary *)dict;
    
    @end

    video.m

    #import "Video.h"
    
    @implementation Video
    
    - (instancetype)initWithDict:(NSDictionary *)dict {
        self = [super init];
        if (self) {
            [self setValuesForKeysWithDictionary:dict];
        }
        return self;
    }
    
    + (instancetype)videoWithDict:(NSDictionary *)dict {
        return [[self alloc] initWithDict:dict];
    }
    
    - (NSString *)time {
        int len = self.length.intValue;
        
        return [NSString stringWithFormat:@"%02d:%02d:%02d", len / 3600, (len % 3600) / 60, (len % 60)];
    }
    
    - (NSString *)description {
        return [NSString stringWithFormat:@"<%@ : %p> { videoId : %@, name : %@, length : %@, videoURL : %@, imageURL : %@, desc : %@, teacher : %@}", [self class], self, self.videoId, self.name, self.length, self.videoURL, self.imageURL, self.desc, self.teacher];
    }
    
    @end

    如果还报错,引入log

    #import <Foundation/Foundation.h>
    
    @interface NSArray (Log)
    
    @end
    
    @interface NSDictionary (Log)
    
    @end
    #import "NSArray+Log.h"
    
    @implementation NSArray (Log)
    
    - (NSString *)descriptionWithLocale:(id)locale
    {
        NSMutableString *strM = [NSMutableString stringWithString:@"(
    "];
        
        [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            [strM appendFormat:@"	%@,
    ", obj];
        }];
        
        [strM appendString:@")"];
        
        return strM;
    }
    
    @end
    
    @implementation NSDictionary (Log)
    
    - (NSString *)descriptionWithLocale:(id)locale
    {
        NSMutableString *strM = [NSMutableString stringWithString:@"{
    "];
        
        [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
            [strM appendFormat:@"	%@ = %@;
    ", key, obj];
        }];
        
        [strM appendString:@"}
    "];
        
        return strM;
    }
    
    @end
  • 相关阅读:
    anaconda环境---ubuntu下重装
    算法---Face_Recognition配置实战篇
    算法---FaceNet+mtcnn的使用记录
    算法---FaceNet理论学习篇
    算法---FaceNet在Tf下的实战篇
    ubuntu系统---切换Py2.X与Py3.X版本
    anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5
    Git---初入开源代码管理库的学习过程003
    day 87 Vue学习六之axios、vuex、脚手架中组件传值
    day 86 Vue学习之五DIY脚手架、webpack使用、vue-cli的使用、element-ui
  • 原文地址:https://www.cnblogs.com/pengpengzhang/p/4846519.html
Copyright © 2011-2022 走看看