ios解析xml的两种方法,NSXMLParser和第三方库GDataXMLNode还有json数据的解析
2016-09-24 12:50
399 查看
//
// ViewController.m
// JsonAndXml
//
// Created by oyf on 16/9/23.
// Copyright © 2016年 mac. All rights reserved.
//
#import "ViewController.h"
#import "Model.h"
#import "GDataXMLNode.h"
@interface
ViewController ()<NSXMLParserDelegate>
@property (nonatomic,strong)
NSMutableArray *data;
@property (nonatomic,strong)
Model *myModel;
@property (nonatomic,copy)
NSString *currentElement;
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// [self Json];
// [self SaxXml];
// [self DomXml];
[self
DomXm2];
}
-(void)Json{
NSData *data = [NSData
dataWithContentsOfURL:[NSURL
URLWithString:@"http://khd.shangbw.com/api/posts.ashx?action=list&category=1800&per=20&page=1"]];
NSDictionary *dict = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingMutableLeaves
error:nil];
// NSLog(@"%@",dict);
NSArray *arr = [dict
objectForKey:@"data"];
self.data = [[NSMutableArray
alloc]init];
for (int i=0; i<arr.count;
i++) {
Model *model = [[Model
alloc]init];
model.post_title = [[arr
objectAtIndex:i]
objectForKey:@"post_title"];
model.post_excerpt = [[arr
objectAtIndex:i]
objectForKey:@"post_excerpt"];
[self.data
addObject:model];
}
// NSLog(@"%@",self.data);
}
-(void)SaxXml{
NSData *data = [NSData
dataWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:@"data.xml"
ofType:nil]];
NSXMLParser *parser = [[NSXMLParser
alloc]initWithData:data];
parser.delegate =
self;
[parser parse];
}
-(void)parserDidStartDocument:(NSXMLParser *)parser{
//解析开始
// NSLog(@"parserDidStartDocument");
self.data = [[NSMutableArray
alloc]init];
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString
*,NSString *> *)attributeDict{
//遇到开始标签,如<name>福州</name>
: <name>为开始标签
// NSLog(@"didStartElement");
if ([elementName
isEqualToString:@"city"]) {
self.myModel = [[Model
alloc]init];
}
self.currentElement = elementName;
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
//标签中的值
// NSLog(@"%@",string);
if ([self.currentElement
isEqualToString:@"name"]) {
self.myModel.post_title = string;
}else
if([self.currentElement
isEqualToString:@"enname"]){
self.myModel.post_excerpt = string;
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
//遇到结束标签,如<name>福州</name>
: </name>为结束标签
// NSLog(@"didEndElement");
if ([elementName
isEqualToString:@"city"]) {
[self.data
addObject:self.myModel];
}
}
-(void)parserDidEndDocument:(NSXMLParser *)parser{
//解析结束
NSLog(@"parserDidEndDocument");
NSLog(@"数据源为:%@",self.data);
}
-(void)DomXml{
self.data = [[NSMutableArray
alloc]init];
NSData *data = [NSData
dataWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:@"data_old.xml"
ofType:nil]];
GDataXMLDocument *domXml = [[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
GDataXMLElement *rootElement = domXml.rootElement;
// NSLog(@"%@",[rootElement elementsForName:@"citys"]);
for (GDataXMLElement *em1
in [rootElement elementsForName:@"citys"]) {
for (GDataXMLElement *em2
in [em1 elementsForName:@"city"]) {
// NSLog(@"%@",[[[em2 elementsForName:@"name"] objectAtIndex:0] stringValue]);
// NSLog(@"%@",[[[em2 elementsForName:@"enname"] objectAtIndex:0] stringValue]);
Model *model = [[Model
alloc]init];
model.post_title = [[[em2
elementsForName:@"name"]
objectAtIndex:0]
stringValue];
model.post_excerpt = [[[em2
elementsForName:@"enname"]
objectAtIndex:0]
stringValue];
[self.data
addObject:model];
}
}
NSLog(@"%@",self.data);
}
-(void)DomXm2{
self.data = [[NSMutableArray
alloc]init];
NSData *data = [NSData
dataWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:@"data.xml"
ofType:nil]];
GDataXMLDocument *domXml = [[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
GDataXMLElement * root =domXml.rootElement;
for (GDataXMLElement * em1
in [root elementsForName:@"citys"]) {
for (GDataXMLElement *em2
in [em1 elementsForName:@"city"]) {
Model * model=[[Model
alloc]init];
NSString * name=[[em2
attributeForName:@"name"]
stringValue];
NSString * enname=[[em2
attributeForName:@"enname"]
stringValue];
model.post_title=name;
model.post_excerpt=enname;
NSLog(@"name=%@,enneme=%@",name,enname);
[self.data
addObject:model];
}
}
}
- (void)didReceiveMemoryWarning {
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
下面附上源码
// ViewController.m
// JsonAndXml
//
// Created by oyf on 16/9/23.
// Copyright © 2016年 mac. All rights reserved.
//
#import "ViewController.h"
#import "Model.h"
#import "GDataXMLNode.h"
@interface
ViewController ()<NSXMLParserDelegate>
@property (nonatomic,strong)
NSMutableArray *data;
@property (nonatomic,strong)
Model *myModel;
@property (nonatomic,copy)
NSString *currentElement;
@end
@implementation ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
// [self Json];
// [self SaxXml];
// [self DomXml];
[self
DomXm2];
}
-(void)Json{
NSData *data = [NSData
dataWithContentsOfURL:[NSURL
URLWithString:@"http://khd.shangbw.com/api/posts.ashx?action=list&category=1800&per=20&page=1"]];
NSDictionary *dict = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingMutableLeaves
error:nil];
// NSLog(@"%@",dict);
NSArray *arr = [dict
objectForKey:@"data"];
self.data = [[NSMutableArray
alloc]init];
for (int i=0; i<arr.count;
i++) {
Model *model = [[Model
alloc]init];
model.post_title = [[arr
objectAtIndex:i]
objectForKey:@"post_title"];
model.post_excerpt = [[arr
objectAtIndex:i]
objectForKey:@"post_excerpt"];
[self.data
addObject:model];
}
// NSLog(@"%@",self.data);
}
-(void)SaxXml{
NSData *data = [NSData
dataWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:@"data.xml"
ofType:nil]];
NSXMLParser *parser = [[NSXMLParser
alloc]initWithData:data];
parser.delegate =
self;
[parser parse];
}
-(void)parserDidStartDocument:(NSXMLParser *)parser{
//解析开始
// NSLog(@"parserDidStartDocument");
self.data = [[NSMutableArray
alloc]init];
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString
*,NSString *> *)attributeDict{
//遇到开始标签,如<name>福州</name>
: <name>为开始标签
// NSLog(@"didStartElement");
if ([elementName
isEqualToString:@"city"]) {
self.myModel = [[Model
alloc]init];
}
self.currentElement = elementName;
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
//标签中的值
// NSLog(@"%@",string);
if ([self.currentElement
isEqualToString:@"name"]) {
self.myModel.post_title = string;
}else
if([self.currentElement
isEqualToString:@"enname"]){
self.myModel.post_excerpt = string;
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
//遇到结束标签,如<name>福州</name>
: </name>为结束标签
// NSLog(@"didEndElement");
if ([elementName
isEqualToString:@"city"]) {
[self.data
addObject:self.myModel];
}
}
-(void)parserDidEndDocument:(NSXMLParser *)parser{
//解析结束
NSLog(@"parserDidEndDocument");
NSLog(@"数据源为:%@",self.data);
}
-(void)DomXml{
self.data = [[NSMutableArray
alloc]init];
NSData *data = [NSData
dataWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:@"data_old.xml"
ofType:nil]];
GDataXMLDocument *domXml = [[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
GDataXMLElement *rootElement = domXml.rootElement;
// NSLog(@"%@",[rootElement elementsForName:@"citys"]);
for (GDataXMLElement *em1
in [rootElement elementsForName:@"citys"]) {
for (GDataXMLElement *em2
in [em1 elementsForName:@"city"]) {
// NSLog(@"%@",[[[em2 elementsForName:@"name"] objectAtIndex:0] stringValue]);
// NSLog(@"%@",[[[em2 elementsForName:@"enname"] objectAtIndex:0] stringValue]);
Model *model = [[Model
alloc]init];
model.post_title = [[[em2
elementsForName:@"name"]
objectAtIndex:0]
stringValue];
model.post_excerpt = [[[em2
elementsForName:@"enname"]
objectAtIndex:0]
stringValue];
[self.data
addObject:model];
}
}
NSLog(@"%@",self.data);
}
-(void)DomXm2{
self.data = [[NSMutableArray
alloc]init];
NSData *data = [NSData
dataWithContentsOfFile:[[NSBundle
mainBundle] pathForResource:@"data.xml"
ofType:nil]];
GDataXMLDocument *domXml = [[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
GDataXMLElement * root =domXml.rootElement;
for (GDataXMLElement * em1
in [root elementsForName:@"citys"]) {
for (GDataXMLElement *em2
in [em1 elementsForName:@"city"]) {
Model * model=[[Model
alloc]init];
NSString * name=[[em2
attributeForName:@"name"]
stringValue];
NSString * enname=[[em2
attributeForName:@"enname"]
stringValue];
model.post_title=name;
model.post_excerpt=enname;
NSLog(@"name=%@,enneme=%@",name,enname);
[self.data
addObject:model];
}
}
}
- (void)didReceiveMemoryWarning {
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
下面附上源码
相关文章推荐
- iOS--XML三种解析方法( XMLDictionary)、(GDataXMLNode)、(NSXMLParser)
- iOS网络数据解析--XML解析详解(GDataXMLNode&原生NSXMLParser)
- iPhone中两种XML解析方式NSXMLParser和GDataXMLNode
- 【iOSXML解析】之:GDataXMLNode方法解析案例
- IOS学习:常用第三方库(GDataXMLNode:xml解析库)
- iOS 详解NSXMLParser方法解析XML数据方法
- 文件学习IOS学习:常用第三方库(GDataXMLNode:xml解析库)
- iOS 详解NSXMLParser方法解析XML数据方法
- 【iOS开发-网络】两种常用的方法解析XML数据
- IOS学习:常用第三方库(GDataXMLNode:xml解析库)
- IOS学习:常用第三方库(GDataXMLNode:xml解析库)
- iOS 详解NSXMLParser方法解析XML数据方法
- iOS开发-使用第三方库AFNetWorking解析JSON和XML数据
- IOS学习:常用第三方库(GDataXMLNode:xml解析库)
- iOS数据解析,XML(SAX,DOM - GDataXMLNode)
- iOS 详解NSXMLParser方法解析XML数据方法
- 关于iOS中几种第三方对XML/JSON数据解析的使用
- 关于iOS中几种第三方对XML/JSON数据解析的使用
- IOS 详解NSXMLParser方法解析XML数据方法
- 用第三方框架GDataXMLNode解析XML数据: