XML解析-第三方和系统方法

一、DOM树状解析  一个个节点解析

GData的抓准备工作

     1.导入动态库: libxml2.dylib

     2.buid setting 里面搜索 header search paths ,添加//usr/include/libxm2

     3.buid setting 里面搜索 other linker flags ,添加 -lxml2

     4.GData JSONKit 都是MRC下的,如果想在ARC下使用 ,加上一句修饰 -font object ******

//1.获取XML路径
    
    NSString *fielPath = [[NSBundle mainBundle]pathForResource:@"Student.xml" ofType:nil];
    
    //2.将XML文件转成字符串
    NSError *error = nil ;
    NSString *xmlString = [[NSString alloc]initWithContentsOfFile:fielPath encoding:NSUTF8StringEncoding error:&error];
    
    //3.讲XML字符串转化为XML类型的数据
    GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithXMLString:xmlString options:0 error:&error];
    
    //4.获取根节点
    GDataXMLElement *rootElement = [document rootElement];
    
    //5.根据标签节点名字来取(一层层取)
    NSArray *studentArray = [rootElement elementsForName:@"student"];
    
    self.dataArray = [NSMutableArray array];
    
    for (int i = 0; i < studentArray.count; i ++) {
        
        Student *student = [[Student alloc]init];
        
        GDataXMLElement *element = studentArray[i];
        
        NSArray *nameArray = [element elementsForName:@"name"];
        
        student.name = [nameArray[0] stringValue];
        
        NSArray *ageArray = [element elementsForName:@"age"];
        student.age = [ageArray[0] stringValue];
        
        NSArray *sexArray = [element elementsForName:@"sex"];
        student.sex = [sexArray[0] stringValue];
        
        [self.dataArray addObject:student];
    }



二、系统自带的方法-SAX

#import "MainViewController.h"
#import "Student.h"
@interface MainViewController ()<NSXMLParserDelegate>

@property (nonatomic,retain) NSMutableArray *dataArray ;

//记录当前解析的节点标签的名字
@property (nonatomic,retain) NSString *currenElementName ;

@property (nonatomic,retain) Student *student ;

@end

@implementation MainViewController

-(void)dealloc{
    [_currenElementName release];
    [_student release];
    [_dataArray release];
    [super dealloc];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    
    //SAX
    
    //1.获取路径
    
    NSString *fielPath = [[NSBundle mainBundle]pathForResource:@"Student.xml" ofType:nil];
    
    //2.转化为xml为二进制数据
    NSData *data = [NSData dataWithContentsOfFile:fielPath];
    
    //3.利用系统的SAX 解析
    NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
    
    //4.指定代理  使用代理方法
    parser.delegate = self ;
    
    self.dataArray = [NSMutableArray array];
    
    //开始解析数据
    [parser parse];
    
    
    
    
    
}


-(void)parserDidStartDocument:(NSXMLParser *)parser{
    
    NSLog(@"开始解析");
    
//    self.currenElementName = nil ;
}



//开始解析某个标签
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
    
    NSLog(@"开始解析标签%@",elementName);
    
    self.currenElementName = elementName ;
    
    
    
}

//取值方法
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    
    NSLog(@"取到的值:%@",string);
    
    if ([self.currenElementName isEqualToString:@"student"]) {
        self.student = [[Student alloc]init];
        
    }
    
    if ([self.currenElementName isEqualToString:@"name"] &&
        self.student.name == nil) {
        self.student.name = string ;
    }
    
    if ([self.currenElementName isEqualToString:@"age"] &&
        self.student.age == nil) {
        self.student.age = string ;
    }
    
    if ([self.currenElementName isEqualToString:@"sex"] &&
        self.student.sex == nil) {
        self.student.sex = string ;
    }
    
    
}

//结束某个标签
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementName isEqualToString:@"student"]) {
        
         [self.dataArray addObject:self.student];
        
        self.student = nil ;
    }
    
    NSLog(@"结束节点 %@",elementName);
    
}

//结束整个文件解析
-(void)parserDidEndDocument:(NSXMLParser *)parser{
    
    NSLog(@"解析完成");
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值