iOS -数据库网络之xml解析之远程解析XML

1.IOS中XML文件获取

 

 //设置远程访问地址

    NSURL *url=[NSURL URLWithString:@""];

    //创建动态URL请求,并初始化

    NSMutableURLRequest * request=[[NSMutableURLRequest alloc]initWithURL:url];

    //设置访问方式为POST

    [request setHTTPMethod:@"post"];

    //设置传参参数(字符串)

    NSString * str=@"";

    //二进制的参数字符串

    NSData * data=[str dataUsingEncoding:NSUTF8StringEncoding];

    //放在请求里

    [request setHTTPBody:data];

    //发送请求

    NSData * resData=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    NSString * s=[[NSString alloc]initWithData:resData encoding:NSUTF8StringEncoding];

    NSLog(@"%@",s);

//通过二进制的数据创建xml转化器

NSXMLParser * parser=[[NSXMLParser alloc]initWithData:data];

//设置代理在对应.h文件中实现该代理<NSXMLParserDelegate>

[parser setDelegate:self];

//启动转换

[parser parse];

2.XML中常用的几种行为

//文档转化开始

-(void)parserDidStartDocument:(NSXMLParser)parser

{

}

//文档转换结束

-(void)parserDidEndDocument:(NSXMLParser)parser

{

}

//元素开始

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *) elementName namespaceURI:(NSString *) namespaceURI    qualifiedName:(NSString *) qName attributes:(NSDictionary *) attributeDict

{

}

//元素结束

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *) elementName namespaceURI:(NSString *) namespaceURI     qualifiedName:(NSString *) qName 

{

}

//发现字符串

-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *) string

{

}

3.XML解析

对于XML格式为多个元素解析:

XML代码如下 

<students> <student>  <name>张三</name>  <sex>男</sex> <age>21</age> </student></students>

(1)创建该元素的类继承NSOject(JCStudent)

JCStudent.h中

//姓名

@property (strong,nonatomic) NSString * name;

//性别

@property (strong,nonatomic) NSString * sex;

//年龄

@property (assign,nonatomic) int age;

(2)ViewController.h中设置属性

#import "JCStudent.h"

@interface ViewController : UIViewController<NSXMLParserDelegate>

{

    NSMutableArray * students;  //学生数组

    BOOL isbz;                 //元素开始标志

    NSString * parName;  //字符串内容

    JCStudent * student;  //student类

}

(3)在ViewController.m中XML的几个行为编写代码

在viewDidLoad方法中

    //初始化动态数组

    students=[[NSMutableArray alloc]initWithCapacity:100];

在“文档转换开始”方法中

    //清空数据

    [students removeAllObjects];

    //字符串内容清空

    parName=@"";

    //标志为NO

    isbz=NO;

在“元素开始”方法中

    if(isbz==YES){//如果标志为YES

         parName=elementName; //字符串内容赋值

    }

    if([elementName isEqualToString:@"student"]){//如果元素为student

        isbz=YES; //标志改为YES

        student=[[JCStudent alloc]init]; //JCStudent初始化

    }    

在“发现字符串”方法中

    if(isbz==YES && parName.length>0){//如果标志为YES字符串内容有值

      [student setValue:string forKey:parName];//添加字符串信息到属性类中

        parName=@"";//字符串内容清空

    }

在“元素结束”方法中

    if([elementName isEqualToString:@"student"]){//如果元素结束为student

      [students addObject:student];//添加类到动态数组中

        isbz=NO;//标志设置为NO

    }

在“文档转换结束”方法中

    //遍历数组

    for(JCStudent * s in students){

         NSLog(@"name=%@,sex=%@,age=%d",s.name,s.sex,s.age);//控制台输出

    }

对于XML格式为单个元素解析(attributeDict字典):

XML代码如下 

<students> <student name=”张三”  sex=“男”  age=“21” /></students>

(1)创建该元素的类继承NSOject(JCStudent)

JCStudent.h中

//姓名

@property (strong,nonatomic) NSString * name;

//性别

@property (strong,nonatomic) NSString * sex;

//年龄

@property (assign,nonatomic) int age;

(2)ViewController.h中设置属性

#import "JCStudent.h"

@interface ViewController : UIViewController<NSXMLParserDelegate>

{

    NSMutableArray * students;  //学生数组

    JCStudent * student;  //student类

}

(3)在ViewController.m中XML的几个行为编写代码

在viewDidLoad方法中

    //初始化动态数组

    students=[[NSMutableArray alloc]initWithCapacity:100];

在“文档转换开始”方法中

    //清空数据

    [students removeAllObjects];

在“元素开始”方法中

    if([elementName isEqualToString:@"student"]){//如果开始元素为 student

        student= [[JCStudent alloc]init];//student类初始化

        NSArray * arr=[attributeDict allKeys];//新建数组获取所有元素的key

        for(NSString * str in arr){//遍历数组

            [student setValue:[attributeDict objectForKey:str] forKey:str];//添加数组到student类中,Value根据Key获得

        }

    }

在“元素结束”方法中

    if([elementName isEqualToString:@"student"]){//如果元素结束为student

      [students addObject:student];//添加类到动态数组中

    }

在“文档转换结束”方法中

    //遍历数组

    for(JCStudent * s in students){

         NSLog(@"name=%@,sex=%@,age=%d",s.name,s.sex,s.age);//控制台输出

    }

相关推荐