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);//控制台输出
}