XML、JSON数据解析

前端之家收集整理的这篇文章主要介绍了XML、JSON数据解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
解析:



XML解析
XML:可扩展性标记语言 主流数据格式之一


功能:数据交换 、web服务 、内容管理 、 用作配置文件(重点)



SAX 解析-->逐行解析(采用协议回调机制)
实现协议 NSXMLParserDelegate
- ( void )startParse
{
//xml 解析:逐行解析

@H_403_61@// 文件列表中读取数据
@H_403_61@//1. 获得文件路径
NSString *sourcePath = [[ NSBundle mainBundle ] pathForResource : @"Student" ofType : @".xml" ];

@H_403_61@//2. 通过路径把文件转换成 @H_403_61@NSData 类型
NSData *data = [ NSData dataWithContentsOfFile :sourcePath];

@H_403_61@创建的时候需要给 @H_403_61@parser 一个字符串数据 @H_403_61@(NSData)
NSXMLParser *parser = [[ NSXMLParser alloc ] initWithData :data];

@H_403_61@设定代理人
parser.
delegate = self ;

@H_403_61@开始对文件进行解析
[parser
parse ];
}

- (
void )parser:( NSXMLParser *)parser didStartElement:( NSString *)elementName namespaceURI:( NSString *)namespaceURI qualifiedName:( NSString *)qName attributes:( NSDictionary *)attributeDict
{
@H_403_61@当找到节点的时候,系统调用这个方法
NSLog ( @" 节点头 " );
if ([elementName isEqualToString : @"students" ]) {
@H_403_61@ // 当找到 @H_403_61@students 节点的时候,初始化数组
self . arr = [ NSMutableArray array ];
}
else if ([elementName @"student" ]) {
@H_403_61@student 节点的时候,创建一个 @H_403_61@对象 @H_403_61@ 添加到数组里
Student *stu = [[ Student init ];
[
self . arr addObject :stu];
[stu
release ];
}
}


- (
NSXMLParser *)parser foundCharacters:( NSString *)string
{
@H_403_61@当节点找到内容的时候,调用
节点内容 " );

@H_403_61@把内容保存起来
tempStr = string;
}


- (
NSXMLParser *)parser didEndElement:( NSString *)qName
{

@H_403_61@当找到节点结尾的时候调用
节点尾 " );
Student *stu = [ lastObject ];

@"number" ]) {
stu.
number = tempStr ;
}
@"name" ]){
stu.
name = @"sex" ]){
stu.
sex = @"phone" ]){
stu.
phone = tempStr ;
}

}




DOM解析-->节点解析

- ( void )startDOMParse
{
@H_403_61@按节点解析

@H_403_61@获取解析的文件信息
NSString *xmlPath = [[ @".xml" ];
dataWithContentsOfFile :xmlPath];


@H_403_61@参数 @H_403_61@1: 要解析的 @H_403_61@xml @H_403_61@2: 随便 @H_403_61@3: 错误信息
GdataxMLDocument *doc = [[ GdataxMLDocument alloc ] initWithData :data options : 0 error : nil ];

@H_403_61@获取文件的根节点
GdataxMLElement *rootElement = [doc rootElement ];


@H_403_61@//3. 进一步搜索所有的子节点
@H_403_61@返回一个装满了 @H_403_61@节点( @H_403_61@GdataxMLElement 对象)的数组
NSArray *stuArrray = [rootElement elementsForName : @"student" ];

@H_403_61@//4. 遍历数组,把 @H_403_61@节点的每个子节点取出来
for ( GdataxMLElement *element in stuArrray) {

init ];

GdataxMLElement *nameElement = [[element @"name" ] lastObject ];
@H_403_61@从 @H_403_61@name 节点中取值
NSString *value = [nameElement stringValue ];
@H_403_61@给学生对象的属性赋值
stu.
name = value;


GdataxMLElement *numberElement = [[element @"number" ] lastObject ];
value = [numberElement
stringValue ];
stu.
number = value;



[
stuDomArray release ];
}


}

JSON解析

@H_403_61@系统提供的 @H_403_61@json 解析方法

NSString *jsonPath = [[ @"txt" ];
dataWithContentsOfFile :jsonPath];

NSError *error = nil ;
@H_403_61@文件数据 @H_403_61@设置解析的结果 @H_403_61@错误信息
NSArray *array = [ NSJSONSerialization JSONObjectWithData :data options : NSJSONReadingMutableContainers error :&error];
@"%@" ,array);


for ( NSDictionary *dic in array) {
init ];

stu.
name = [dic objectForKey : @"name" ];
stu.
sex = [dic @"sex" ];
stu.
phone = [dic @"phone" ];
stu.
number = [dic @"number" ];

[
stuArray release ];
}


第三方JSON解析包:JSONkit,SBJOSN

猜你在找的XML相关文章