JSON解析和XML解析
一、 XML:用到一个开源解析类,GDataXMLNode(将其加入项目中),添加libxml2.dylib框架
经常用到的方法:
1.- (id)initWithXMLString:(NSString *)str options:(unsigned int)mask error:(NSError *)error
2.- (id)initWithData:(NSData *)data options:(unsigned int)mask error:(NSError *)error
这两个方法可以将NSString类型或者NSData类的数据转化为GDataXMLNode类可以解析的XML文档
3.- (GDataXMLElement *)rootElement 返回GDataXMLElement中所有节点信息
4.- (NSArray *)elementsForName:(NSString *)name 返回当前节点下名称为name的所有节点,返回值为数组。
5.- (NSString *)stringValue 返回节点中间的值。
二、 JSON:用到开源的框架SBJSON,对NSString类的扩展,我们程序中的所有NSString对象都可以调用其中的方法。
SBJSON的方法- (id)JSONValue 此方法返回一个ID类对象,因为JSON信息都是以键值来传输的,所以我们会用NSDictionary来接收这个返回值。
两种结构:
1.“键值对”的集合。对象(object),记录(Record),结构(struct),字典(dictionary),哈希表(hashtable),键列表(keyed list),关联数组(associative array)。
2.值的有序列表。数组(Array)。
JSON解析
1大括号代表字典
2中括号(小括号)代表数组
3冒号的左右两边分别为键和值(key:value)
4数据和数据之间用逗号隔开
我们在本机上创建一个file.xml,进行解析,并取出年龄35
//JSON解析
本地读取student.xml文件
NSString *jstr=[NSString stringWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"File" ofType:@"json"] encoding:NSUTF8StringEncoding error:nil];//取到路径
//进行解析,因为最外面是字典,所以要用字典类型的对象来接
NSDictionary *dic=[jstr JSONFragmentValue];
//下面取值
//取到hello这个key,取到的是数组里的内容所以要用数组来接
NSArray *arr=[dic objectForKey:@"hello"];
//取到下标为1的数组,因为数组里面又是一个字典,所以用字典来接
NSDictionary *dic2=[arr objectAtIndex:1];
//取到字典key为age的value,因为取出来的值是字符串,用字符串来接
NSString *jage=[dic2 objectForKey:@"age"];
//输出取出的age
NSLog(@"%@",jage);
//XML解析
同样我们也在本地创建一个File.xml的文件里面包含:
<students>
<student>
<name>kellen</name>
<age>25</age>
<sex>M</sex>
</student>
<student>
<name>jack</name>
<age>35</age>
<sex>M</sex>
</student>
</students>
//step1:本地读取student.xml文件
//获取目录的xml文件
NSString*xmlPath=[[NSBundle mainBundle]pathForResource:@"File" ofType:@"xml"];
NSData*xmlData=[[NSData alloc]initWithContentsOfFile:xmlPath];
//step2:将包含xml内容的字符串转化为document对象
GDataXMLDocument*xmldoc=[[GDataXMLDocument alloc]initWithData:xmlData options:0 error:nil];
//step3:获取到根节点
//获取根节点(students)
GDataXMLElement*rootElement=[xmldoc rootElement];
//step4:遍历节点信息
//获取根节点下的节点(student)
NSArray*students=[rootElement elementsForName:@"student"];
NSLog(@"%@",students);
//使用forin遍历XML中的所有数据
for (GDataXMLElement*stu in students) {
//获取name节点的属性
GDataXMLElement*nameElement=[[stu elementsForName:@"name"]objectAtIndex:0];
NSString*name=[nameElement stringValue];//获取nameElement
NSLog(@"Student name is:%@",name);
//获取age节点的属性
GDataXMLElement*ageElement=[[stu elementsForName:@"age"]objectAtIndex:0];
NSString*age=[ageElement stringValue];
NSLog(@"User age is :%@",age);
}
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。