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 还要返回数组,有点不理解这个类设计为什么不能直接读取到数据,非要这样子才能凑合使用。