此博文主要说的是用NSXML来解析数据。
http://www.oschina.net/action/api/tweet_list?uid=0&pageIndex=0&pageSize=20
这个是用ASIHttp发送以上的请求,请求数据。
-(void)getDataFromServer{
NSString *urlStr = [NSString stringWithFormat:@"%@?uid=%d&pageIndex=%d&pageSize=%d",api_tweet_list,0,0,20];
NSURL *url = [NSURL URLWithString:urlStr];
NSLog(@"%@",url);
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setRequestMethod:@"get"];
[request setDelegate:self];
[request setDidFailSelector:@selector(getError:)];
[request setDidFinishSelector:@selector(getDataOnlie:)];
[request startAsynchronous];
}
//开始对返回的 data进行解析 ——
然后就是难点了-如何解析出你想要的内容。
#pragma mark -
#pragma mark - XMLDelegate
- (void )parserDidStartDocument:(NSXMLParser *)parser
{
twitterDic = [[ NSMutableDictionary alloc] initWithCapacity: 2 ]; // 每一条信息都用字典来存;
parserObjects = [[NSMutableArrayalloc]initWithCapacity:2];
//每一组信息都用数组来存,做后得到的数据就在这个数组中}
首先是 - (void )parserDidStartDocument:(NSXMLParser *)parser
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if ([elementName isEqualToString:@"tweet"])//找节点进行解析
{
NSMutableDictionary *newNode = [[NSMutableDictionaryalloc]initWithCapacity:0];
[parserObjects addObject:newNode];
twitterDic = newNode;
}
else
if (twitterDic) {
NSMutableString *string = [[NSMutableStringalloc]initWithCapacity:0];
[twitterDic setObject:stringforKey:elementName];
[string release];
currentText = [[NSStringalloc]init];
currentElementName = elementName;
}
}
然后进入
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
这个是把非UTF-8的字符串解析出来了。如果UTF-8字符串也会执行但显示的的内容为空解析不出来内容。
有UTF8的汉字符串就会进入这个方法了
-(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock{
currentText = [NSStringstringWithUTF8String:[CDATABlockbytes]];
// NSLog(@"cData:%@",[NSString stringWithUTF8String:[CDATABlock bytes]]);
}
下一步,就是加入到字典里了,调用这个回调函数。
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:currentElementName]) {
[twitterDic setObject:currentTextforKey:currentElementName];//把其他节点放在字典中
}
}
我们就将一项数据保存起来了。
解析完成后调这个回调方法
-(void)parserDidEndDocument:(NSXMLParser *)parser{//得到的解析结果
NSLog(@"解析出来的一共有%d项,\n第一项是:%@",[parserObjects count],[parserObjectsobjectAtIndex:0]);
NSLog(@"%@",[[parserObjectsobjectAtIndex:0]objectForKey:@"author"]);
NSLog(@"%@",[[parserObjectsobjectAtIndex:0]objectForKey:@"body"]);
}
我们将结果打印出来看到如下
2013-05-13 15:59:37.855 XMLPractice[2524:11303] 解析出来的一共有20项,
第一项是:{
appclient = 1;
author = "\U5149\U5934\U7a0b\U5e8f\U5458";
authorid = 569120;
body = "\U56de\U5934\U770b\U770b \U4ee5\U524d\U5199\U7684\U4ee3\U7801 \U771f\U5b9e\U5728 \U73b0\U5728\U81ea\U5df1\U597d\U61d2\U54e6";
commentCount = 0;
id = 1992631;
imgBig = "";
imgSmall = "";
portrait = "http://static.oschina.net/uploads/user/284/569120_50.jpg?t=1353067742000";
pubDate = "2013-05-13 15:59:11";
}
2013-05-13 15:59:37.855 XMLPractice[2524:11303] 光头程序员
2013-05-13 15:59:37.855 XMLPractice[2524:11303] 回头看看 以前写的代码 真实在 现在自己好懒哦
附上源码:http://download.csdn.net/detail/zjh467545737/5367969 (虽然里面有TBXML库但还没用到,准备再用TBXML解析对比一下)。
参考:http://www.cnblogs.com/lovecode/articles/2305840.html