你的位置:首页 > 操作系统

[操作系统]XML数据解析(系统方法)


是一种自描述的数据交换格式。是一种非常重要的数据交换 格式,多年来一直用于各种计算机语言中。




解析的内容为:

<users>  <user id="001">    <name>张三</name>    <password>123456</password>    <nickname>小张</nickname>    <description>1111111111</description>  </user>    <user id="002">    <name>张三</name>    <password>2222222</password>    <nickname>小四儿</nickname>    <description>李四是个好学生</description>  </user>    <user id="003">    <name>张三</name>    <password>88888888</password>    <nickname>小五</nickname>    <description>1234567890</description>  </user>  </users>

事先已将数据读取并存储在data中.
创建一个类,继承自NSObject,命名为userInfo

@property(nonatomic,copy)NSString *uID;@property(nonatomic,copy)NSString *name;@property(nonatomic,copy)NSString *password;@property(nonatomic,copy)NSString *nickname;@property(nonatomic,copy)NSString *description;

再创建一个类,同样继承自NSObject,命名为userParser,实现

userParser.h

#import <Foundation/Foundation.h>#import "user.h"@interface userParser : NSObject<NS//存储信息的数组@property(nonatomic,retain)NSMutableArray *array;//实例@property(nonatomic,retain)user *people;//创建字符串保存信息@property(nonatomic,copy)NSMutableString *buffer;//读取-(void)parserWithString:(NSString *)string;@end

userparser.m

#import "userParser.h"@implementation userParser-(void)parserWithString:(NSString *)string{  //使用系统  NSstring dataUsingEncoding:NSUTF8StringEncoding]];  //设置代理  parser.delegate=self;  //开始解析  [parser parse];}#pragma mark ---NS//开始解析- (void)parserDidStartDocument:(NS)parser{  NSLog(@"it begin");}//解析结束- (void)parserDidEndDocument:(NS)parser{  NSLog(@"it is over");  for (int i=0; i<_array.count; i++) {    user *user=_array[i];    NSLog(@"%@,%@,%@,%@,%@",user.uID,user.name,user.password,user.nickname,user.description);  }}//遇到开始标签//attributeDict标签属性- (void)parser:(NS)attributeDict{  if ([elementName isEqualToString:@"users"]) {    _array=[[NSMutableArray alloc]init];  }  else if ([elementName isEqualToString:@"user"])  {    _people=[[user alloc]init];    //<user id="3">    _people.uID=[attributeDict objectForKey:@"id"];  }  else if ([elementName isEqualToString:@"name"])  {    _buffer=[[NSMutableString alloc]init];  }  else if ([elementName isEqualToString:@"password"])  {    _buffer=[[NSMutableString alloc]init];  }  else if ([elementName isEqualToString:@"nickname"])  {    _buffer=[[NSMutableString alloc]init];  }  else if ([elementName isEqualToString:@"description"])  {    _buffer=[[NSMutableString alloc]init];  }  }//结束标签- (void)parser:(NS)qName{  if ([elementName isEqualToString:@"name"]) {    _people.name=_buffer;  }  else if ([elementName isEqualToString:@"password"])  {    _people.password=_buffer;  }  else if ([elementName isEqualToString:@"nickname"])  {    _people.nickname=_buffer;  }else if ([elementName isEqualToString:@"description"])  {    _people.description=_buffer;  }  else if ([elementName isEqualToString:@"user"])  {    [_array addObject:_people];  }}//读取内容- (void)parser:(NSstring{  //NSCharacterSet字符串结合,取出字符串中的空格  [_buffer appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];}

在viewcontroller中,创建userparser的实例对象,通过parserWithString方法实现数据解析

 userParser *uparser=[[userParser alloc]init];
    [uparser parserWithString:user];

 

注:将数据解析与界面显示分开写有助于减低程序的耦合,同时也符合MVC编程模式.