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編程模式.