因为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 / , (len % ) / , (len % )];
} - (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:@"(\n"]; [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[strM appendFormat:@"\t%@,\n", obj];
}]; [strM appendString:@")"]; return strM;
} @end @implementation NSDictionary (Log) - (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *strM = [NSMutableString stringWithString:@"{\n"]; [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[strM appendFormat:@"\t%@ = %@;\n", key, obj];
}]; [strM appendString:@"}\n"]; return strM;
} @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. servlet表单中get和post方法的区别

    Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法.二者主要区别如下: 1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据. 2.Ge ...

  2. centos Install Docker

    安装必备软件 $ yum -y install iptables iptables-services net-tools vim wget $ wget -P ~ https://github.com ...

  3. 关于min_25筛的一些理解

    关于min_25筛的一些理解 如果想看如何筛个普通积性函数啥的,就别往下看了,下面没有的(QwQ). 下文中,所有的\(p\)都代表质数,\(P\)代表质数集合. 注意下文中定义的最小/最大质因子都是 ...

  4. 自学Zabbix9.1 Network Discovery 网络发现原理

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix9.1 Network Discovery 网络发现原理 1. 网络发现简介 网络 ...

  5. BZOJ 3612: [Heoi2014]平衡

    3612: [Heoi2014]平衡 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 283  Solved: 219[Submit][Status][ ...

  6. [luogu2280][bzoj1218][HNOI2003]激光炸弹

    题目描述 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标.现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目标在地图上的位置,每个目标都有 ...

  7. 【LOJ#10180】烽火传递 单调队列+dp

    题目大意:给定一个 N 个非负整数数组成的序列,每个点有一个贡献值,现选出其中若干数,使得每连续的 K 个数中至少有一个数被选,要求选出的数贡献值最小. 题解:设 \(dp[i]\) 表示考虑了序列前 ...

  8. 逆元&欧拉函数

    欧拉函数: φ(p)表示小于p的正整数中与p互质的数的个数,称作欧拉函数. 求单个数的欧拉函数时可以利用来求 其中pi为p分解出的质因数,ki表示该质因数的指数 代码: #include<cst ...

  9. jar文件放在桌面上双击启动不了,但放在其它任何文件夹里都可以双击启动

    今天本来是想尝试一下Java Network Launching Protocol (JNLP,java网络加载协议) 的,写了一个简单的窗口程序,打包成jar保存到桌面上,双击等了半天没显示出来. ...

  10. module模块和包(十七)

    在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办法,把这些定义存放在文 ...