加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

苹果开发 笔记(74)GDataXML 解析 xml

发布时间:2020-12-16 06:07:59 所属栏目:百科 来源:网络整理
导读:ios xml 解析有不同方式,基于sax 和dom ,查看了一些介绍。查阅了一篇老文章介绍不同的解析的类 如何在你的项目选择适合的XML 前段时间第一个学习的ios里面用了这个xml解析,基于系统自带的NSXML 解析器。第三方有几种好用的如 TBXML、GDataXML 、KissXML

ios xml 解析有不同方式,基于sax 和dom ,查看了一些介绍。查阅了一篇老文章介绍不同的解析的类 如何在你的项目选择适合的XML

前段时间第一个学习的ios里面用了这个xml解析,基于系统自带的NSXML 解析器。第三方有几种好用的如 TBXML、GDataXML 、KissXML 等。

GDataXML

下面我们尝试一下 GDataXML 解析了一个xml。
1. 首先点击进去下载GDataXML
2. 下载完拖放到工程目录,作为组使用,配置一下,在Build Phase 的 Link Binary With Library 添加 libxml2.dylib 动态库
3. 在工程Build setting 中找到Header Search Path 添加路径 /usr/include/libxml2 到路径中
4. 编译工程项目

这次我们选用人民网的 rss
http://www.people.com.cn/rss/politics.xml

点击进去可以查看如下的xml结构

item 是新闻的主体。这部分是我们需要解析的地方。在实验当中,构建一个类标记和他一样的即可。这个类用于显示的数据 类。 编写的时候,我们可以快速实验阅读这个库 的一些方法,GDataXML 后来的版本支持xpath 的写法。类似搜索方式读取节点。

下面进行编程一下

#import <Foundation/Foundation.h>

@interface NewsItem : NSObject

@property (nonatomic,strong) NSString *title; //标题
@property (nonatomic,strong) NSString *news_id; //新闻ID
@property (nonatomic,strong) NSString *link;//链接
@property (nonatomic,strong) NSString *guid;//
@property (nonatomic,strong) NSString *pubDate;//发布日期

@end
#import "ViewController.h"
#import "GDataXMLNode.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString *url = @"http://www.people.com.cn/rss/politics.xml";

    NSError *error = nil;
    NSString *xmlStr = [NSString stringWithContentsOfURL:[NSURL URLWithString:url] encoding:NSUTF8StringEncoding error:&error];
    GDataXMLDocument *doc  = [[GDataXMLDocument alloc]initWithXMLString:xmlStr error:&error];

    NSArray *array =  [doc nodesForXPath:@"//item" error:&error];//注:采用路径的写法,也可以channel/item
    for (GDataXMLElement *item in array)
    {
          NSLog(@"%@",[[item elementsForName:@"title"][0] stringValue]);
    }    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

这样子就可以读取到数据了。奇怪是elementsForName 还要返回数组,有点不理解这个类设计为什么不能直接读取到数据,非要这样子才能凑合使用。

输出结果日志查看调试结果

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读