XML是一种自描述的数据交换格式。是一种非常重要的数据交换 格式,多年来一直用于各种计算机语言中。XML类似HTML,有一对对标签对,格式比HTML严谨,一个<>开始,一个</>结尾.

解析的内容为:

<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,实现xml文件的读取.

userParser.h

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

userparser.m

#import "userParser.h" @implementation userParser-(void)parserWithString:(NSString *)string{    //使用系统XML解析方法    NSXMLParser *parser=[[NSXMLParser alloc]initWithData:[string dataUsingEncoding:NSUTF8StringEncoding]];    //设置代理    parser.delegate=self;    //开始解析    [parser parse];}#pragma mark ---NSXMLParserDelegate---//开始解析- (void)parserDidStartDocument:(NSXMLParser *)parser{    NSLog(@"it begin");}//解析结束- (void)parserDidEndDocument:(NSXMLParser *)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:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)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:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)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:(NSXMLParser *)parser foundCharacters:(NSString *)string{    //NSCharacterSet字符串结合,取出字符串中的空格    [_buffer appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];}

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

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

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

更多相关文章

  1. XML文件要有根标签(错误)的代码解决分享
  2. 详解xml型字符串解析时存在& < >符号时的解决方案
  3. 分享一个xml字符串通过dom4j解析的方法
  4. 在IE下字符串与XML转换产生BUG的解决方案
  5. xml字符串的10篇文章推荐
  6. cdata标签如何使用
  7. 学习C第二天-字符串
  8. 解决matplotlib文字标签遮挡问题
  9. Python进阶:如何将字符串常量转为变量?

随机推荐

  1. Android如何设置TextView的行间距、行高
  2. ndk完整编译cocos2dx项目总结
  3. Android 让一个控件或布局居于底部的办法
  4. Android蓝牙开发浅析
  5. android EditText输入限制
  6. Android中的消息机制-源码分析
  7. Android系统自带样式(android:theme)
  8. Android本地动作
  9. Android(安卓)禁止屏幕旋转和重启Activit
  10. Android(安卓)游戏开发中横竖屏切换问题