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

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

  1. //
  2. // ViewController.m
  3. // 04-xml解析GDataXML(DOM方式)
  4. //
  5. // Created by jerry on 15/9/29.
  6. // Copyright (c) 2015年 jerry. All rights reserved.
  7. //
  8.  
  9. #import "ViewController.h"
  10. #import "GDataXMLNode.h"
  11. #import "Video.h"
  12. @interface ViewController ()
  13. @property(nonatomic,strong)NSMutableArray *videos;
  14. @end
  15.  
  16. @implementation ViewController
  17. -(NSMutableArray *)videos
  18. {
  19. if (_videos ==nil) {
  20. _videos = [NSMutableArray array];
  21. }
  22. return _videos;
  23. }
  24.  
  25. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  26. // 1.URL
  27. NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/videos.xml"];
  28.  
  29. // 2.send request
  30. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  31.  
  32. // 3.connection
  33. [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
  34. // 将xml 整个文件读入内存,对应的就是GDataXMLDocument 对象
  35. GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data error:NULL];
  36. // 对应的是 videos
  37. // NSLog(@"%@",document.rootElement.children);
  38. for (GDataXMLElement *element in document.rootElement.children) {
  39. // 对应的是video对象,所以就在这里创建video对象
  40. // NSLog(@"%@",element);
  41. Video *video = [[Video alloc] init];
  42. // 这个遍历 就是取出video对象对应的所有属性
  43. for (GDataXMLElement *node in element.children) {
  44. // 拿到所有的值,对应的是每一个属性
  45. // NSLog(@"%@----%@",node.name,node.stringValue);
  46.  
  47. [video setValue:node.stringValue forKeyPath:node.name];
  48. }
  49. // 跟踪属性
  50. // NSLog(@"%@",element.attributes);
  51. // 遍历element.attributes 数组,拿到属性值
  52. for (GDataXMLNode *att in element.attributes) {
  53. // kvc 进行赋值
  54. [video setValue:att.stringValue forKeyPath:att.name];
  55. }
  56. // 模型添加到一个数组
  57. [self.videos addObject:video];
  58. }
  59. NSLog(@"搞定。。。%@",self.videos);
  60. }];
  61. }
  62.  
  63. @end

video.h

  1. #import <Foundation/Foundation.h>
  2.  
  3. @interface Video : NSObject
  4.  
  5. @property (nonatomic, copy) NSNumber *videoId;
  6. @property (nonatomic, copy) NSString *name;
  7. @property (nonatomic, copy) NSNumber *length;
  8. @property (nonatomic, copy) NSString *videoURL;
  9. @property (nonatomic, copy) NSString *imageURL;
  10. @property (nonatomic, copy) NSString *desc;
  11. @property (nonatomic, copy) NSString *teacher;
  12.  
  13. @property (nonatomic, readonly) NSString *time;
  14.  
  15. - (instancetype)initWithDict:(NSDictionary *)dict;
  16. + (instancetype)videoWithDict:(NSDictionary *)dict;
  17.  
  18. @end

video.m

  1. #import "Video.h"
  2.  
  3. @implementation Video
  4.  
  5. - (instancetype)initWithDict:(NSDictionary *)dict {
  6. self = [super init];
  7. if (self) {
  8. [self setValuesForKeysWithDictionary:dict];
  9. }
  10. return self;
  11. }
  12.  
  13. + (instancetype)videoWithDict:(NSDictionary *)dict {
  14. return [[self alloc] initWithDict:dict];
  15. }
  16.  
  17. - (NSString *)time {
  18. int len = self.length.intValue;
  19.  
  20. return [NSString stringWithFormat:@"%02d:%02d:%02d", len / , (len % ) / , (len % )];
  21. }
  22.  
  23. - (NSString *)description {
  24. 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];
  25. }
  26.  
  27. @end

如果还报错,引入log

  1. #import <Foundation/Foundation.h>
  2.  
  3. @interface NSArray (Log)
  4.  
  5. @end
  6.  
  7. @interface NSDictionary (Log)
  8.  
  9. @end
  1. #import "NSArray+Log.h"
  2.  
  3. @implementation NSArray (Log)
  4.  
  5. - (NSString *)descriptionWithLocale:(id)locale
  6. {
  7. NSMutableString *strM = [NSMutableString stringWithString:@"(\n"];
  8.  
  9. [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  10. [strM appendFormat:@"\t%@,\n", obj];
  11. }];
  12.  
  13. [strM appendString:@")"];
  14.  
  15. return strM;
  16. }
  17.  
  18. @end
  19.  
  20. @implementation NSDictionary (Log)
  21.  
  22. - (NSString *)descriptionWithLocale:(id)locale
  23. {
  24. NSMutableString *strM = [NSMutableString stringWithString:@"{\n"];
  25.  
  26. [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
  27. [strM appendFormat:@"\t%@ = %@;\n", key, obj];
  28. }];
  29.  
  30. [strM appendString:@"}\n"];
  31.  
  32. return strM;
  33. }
  34.  
  35. @end

在iOS 开发中用GDataXML(DOM方式)解析xml文件的更多相关文章

  1. 用JAXP的dom方式解析XML文件

    用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...

  2. Java&Xml教程(二)使用DOM方式解析XML文件

    DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...

  3. Java-Web DOM方式解析xml文件

    XML DOM 树形结构: DOM 节点 根据 DOM,XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 元素是一个元素节点 包含在 XML 元素中 ...

  4. DOM方式解析XML文件实例

    books.XML文件: <?xml version="1.0" encoding="utf-8"?><bookstore>    &l ...

  5. dom方式解析xml文件的步骤

    使用java类即可

  6. Dom方式解析XML

    public class TestXML { public static void main(String[] args) throws SAXException, IOException { //D ...

  7. 用DOM方式解析XML

    一.用DOM方式解析XML 此例子节点结构如下: 1.获取book节点属性 (1).如果不知道节点的属性,通过 NamedNodeMap attrs = book.getAttributes(); 来 ...

  8. Java眼中的XML--文件读取--1 应用DOM方式解析XML

    初次邂逅XML: 需要解析的XML文件: 这里有两个book子节点. 1.如何进行XML文件解析前的准备工作,另外解析先获取book节点. 这个我后来看懂了: 这个Node的ELEMENT_NODE= ...

  9. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

随机推荐

  1. Git初次使用总结,安装到上传代码,多平台[码云|github]

    安装步骤 1.选择安装路径 2.选择创建图标,选择安装Git Bash和Git GUI 3.选择创建开始菜单 4.选择:use git and optional unix tools from the ...

  2. 基于Spring Security和 JWT的权限系统设计

    写在前面 关于 Spring Security Web系统的认证和权限模块也算是一个系统的基础设施了,几乎任何的互联网服务都会涉及到这方面的要求.在Java EE领域,成熟的安全框架解决方案一般有 A ...

  3. 【原创】py3+requests+json+xlwt,爬取拉勾招聘信息

    在拉勾搜索职位时,通过谷歌F12抓取请求信息 发现请求是一个post请求,参数为: 返回的是json数据 有了上面的基础,我们就可以构造请求了 然后对获取到的响应反序列化,这样就获取到了json格式的 ...

  4. luogu2577/bzoj1899 午餐 (贪心+dp)

    首先,应该尽量让吃饭慢的排在前面,先按这个排个序 然后再来决定每个人到底去哪边 设f[i][j]是做到了第i个人,然后1号窗口目前的总排队时间是j,目前的最大总时间 有这个i和j的话,再预处理出前i个 ...

  5. android 同时打开两个sqlite database db

    1,数据库类 package com.example.testdb; import android.content.Context; import android.database.SQLExcept ...

  6. FFMEPG -- A ffmpeg and SDL Tutorial : tutorial05

    修改了同步播放ffmpeg问题.并且增加可以放大视频. // tutorial05.c // A pedagogical video player that really works! // // C ...

  7. 【洛谷P1273】有线电视网

    题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,叶子节点有点权,每条边有边权,每经过一条边都减去该边权,每经过一个节点都加上该点权,求在保证权值和为非负数的前提下最多能经过多少个叶子节点. ...

  8. code::Blocks生成的dll 在 java jni 调用遇到的问题

    Test.java__________________________________ public class Test{    public static native void p(); pub ...

  9. logging模块(二十六)

    用于便捷记录日志且线程安全的模块 可在logging.basicConfig()函数中通过具体参数来更改logging模块默认行为,可用参数有 filename:用指定的文件名创建FiledHandl ...

  10. Zookeeper3.4.10 + ActiveMQ-5.15.0 集群搭建

    网上的教程真的是凤毛麟角,就不想说啥了,一次一次把我带入坑. 好了关于Zookeeper的搭建已经说好了,本文说说基于Zookeeper的MQ集群. 第一步.将mq安装包上传到CentOS7,并解压 ...