由于服务器早已关闭,在此不能看到效果,只能给大家看一下代码,知道如何解析的了,想必大家都知道XML数据格式长得什么样子吧,在此贴出一点XML数据格式
曹操,50|宁教我负天下人。
孙权,容我三思。
刘备,45,以德服人
xml数据格式 extend mark launage
<friend>
<people>
<name>曹操</name>
<sons>
<son>曹丕</son>
<son>曹冲</son>
</sons>
<age>50</age>
<sign>宁教我负天下人</sign>
</people>
<people>
<name>孙权</name>
<sign>容我三思</sign>
</people>
<people>
<name>刘备</name>
<age>45</age>
<sign>以德服人</sign>
</people>
</friend>
//()代表扩展,()里面有代码就是一个类别
@interface FriendsListVc ()
//@property在.h文件中在其他类中也可以打点使用;@property在.m文件中只有在自己类中使用
@property (nonatomic,retain)People *p;
@end
@implementation FriendsListVc
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
_table.dataSource = self;
_table.delegate = self;
_data = [[NSMutableData alloc]init];
_array = [[NSMutableArray alloc]init];
_string = [[NSMutableString alloc]init];
NSString *userName = [[NSUserDefaults standardUserDefaults]objectForKey:@"userName"];
//请求好友列表
NSString *urlString = [NSString stringWithFormat:@"http://127.0.0.1:8080/A/a?command=2&name=%@",userName];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start];
}
#pragma mark- URL
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"失败原因:%@",error);
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[_data setData:[NSData data]];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_data appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *string = [[NSString alloc]initWithData:_data encoding:NSUTF8StringEncoding];
NSLog(@"\n%@",string);
//xml解析器 创建一个解析器, parser,语法解析器
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:_data];
//设置解析代理
parser.delegate = self;
//开始解析
[parser parse];
[parser release];
[string release];
}
#pragma mark- XML
//当发现开始标签时调用 element,元素,要素,原理,成分
//step1、发现开始标签,清空原来数据
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSLog(@"开始标签%@",elementName);
//发现users开始标签时,说明解析开始,需要准备一个空数组用来存放所有好友
if ([elementName isEqualToString:@"users"])
{
[_array removeAllObjects];
}
//发现user开始标签时,说明解析到了一个好友,需要创建一个People对象表示这个好友
else if ([elementName isEqualToString:@"user"])
{
self.p = [[[People alloc]init]autorelease];
}
//发现name、tname、email开始标签,需要读取这个好友的name、tname、email字符串,需要准备一个空字符串用于拼接
else if ([elementName isEqualToString:@"name"]||[elementName isEqualToString:@"tname"]||[elementName isEqualToString:@"email"])
{
[_string setString:@""];
}
}
//发现字符时调用 这个方法可能会多次调用
//step2、发现字符时,将字符拼接到字符串中
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSLog(@"字符%@",string);
//发现新字符时拼接到_string中
[_string appendString:string];
//NSLog(@"拼接了字符%@",_string);
}
//发现结束标签时调用
//step3、发现结束标签时,给其赋值
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@"结束标签%@",elementName);
//当发现name结束标签时,说明name拼接完毕,赋值给当前people的name属性
if ([elementName isEqualToString:@"name"])
{
self.p.name = _string;
}
else if ([elementName isEqualToString:@"tname"])
{
self.p.trueName = _string;
}
else if ([elementName isEqualToString:@"email"])
{
self.p.email = _string;
}
//当发现user结束标签时,说明好友创建完毕,把所有好友加入数组中
else if ([elementName isEqualToString:@"user"])
{
[_array addObject:self.p];
}
//当发现users结束标签时,说明解析结束,刷新tableView
else if ([elementName isEqualToString:@"users"])
{
[_table reloadData];
}
}
#pragma mark- table
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _array.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [_table dequeueReusableCellWithIdentifier:@"cell"];
if (!cell)
{
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"]autorelease];
}
People *p = [_array objectAtIndex:indexPath.row];
cell.textLabel.text = p.name;
cell.detailTextLabel.text = p.email;
return cell;
}