您的位置:首页 > 移动开发 > IOS开发

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
下面附上源码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: