iOS 网页内容解析xml、json

源开66 发布于 2012/09/27 16:34
阅读 6K+
收藏 3
各位大虾,初学者请教下:我现在制作了一个视图表,点击单元格,链接到一个网址,怎样得到网页里某部分的内容,比如:  http://zhuli.aigou.com/assis/assisinfolist.html?stairSubjectId=1   网页内的问答内容,在手机上显示。网上给了很多关于ios  XML和JSON解析方法,我是初学者,想请问下,解析前要做什么准备工作?另外如何查看网页的API接口类型是XML的还是JSON的?什么情况下用XML解析,什么情况下用JSON解析?越详细越好,最好能举个简单的例子,截图下操作过程,谢谢!!!!
加载中
0
KSHime
KSHime
在此例子中最直接的方法就是直接解析其源碼,即解析其html。
至於網頁的API接口的話就要去查看其源碼了,看所需的資料該網站是以何種方式傳回,再以該方式解析即可。大致分為兩種:JSON以及XML。

解析html還有很多方法,ex. 使用正則運算式匹配, etc.
此處只說明解析html:使用TFHpple(https://github.com/topfunky/hpple)
 NSURL *htmlUrl = [NSURL urlWithString:"http://zhuli.aigou.com/assis/assisinfolist.html?stairSubjectId=1"];

NSStringEncoding htmlEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
//此網頁編碼為gb2312,使用gb18030解碼
//<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

NSString *htmlString = [NSString stringWithData:[NSData datatWithContentsOfUrl:htmlUrl] encoding:htmlEncoding];
//將網頁源碼以gb18030解碼

NSData *htmlData = [htmlString dataUsingEncoding:NSUTF8StringEncoding];
//將網頁源碼以UTF-8編碼成NSData


TFHpple *htmlHpple = [TFHpple hppleWithHTMLData:htmlData];
//使用TFHpple解析網頁

NSArray *arrayTitle = [htmlHpple searchWithXPathQuery:@"//div[@class  = 'theme']/h3/a"];
NSArray *arrayContent = [htmlHpple searchWithXPathQuery:@"//div[@class  = 'theme']/p"];
//此陣列為篩選結果
//TFHpple使用XPath來篩選,XPath介紹(W3C):http://www.w3school.com.cn/xpath/index.asp

for(int i = 0; i < [arrayTitle count]; i++) {
	NSString *title = [[arrayTitle objectAtIndex:i] content];
	NSString *content = [[arrayContent objectAtIndex:i] content];
	
	//此處title, content即為所求。
}




KSHime
KSHime
+stringWithData:encoding: 這個方法不小心寫錯了,應該是: -initWithData:encoding: 至於-dataUsingEncoding:這個方法是定義在NSString中的。
源开66
源开66
谢谢KSHime的回答,不过第7--10行的stringWithData: encoding: 和dataUsingEncoding:这两个方法没有呀,下载得TFHpple里也没找到这两个方法,是不是你在别的类里面定义的??请详解,再次感谢!!!
0
源开66
源开66

引用来自“KSHime”的答案

在此例子中最直接的方法就是直接解析其源碼,即解析其html。
至於網頁的API接口的話就要去查看其源碼了,看所需的資料該網站是以何種方式傳回,再以該方式解析即可。大致分為兩種:JSON以及XML。

解析html還有很多方法,ex. 使用正則運算式匹配, etc.
此處只說明解析html:使用TFHpple(https://github.com/topfunky/hpple)
 NSURL *htmlUrl = [NSURL urlWithString:"http://zhuli.aigou.com/assis/assisinfolist.html?stairSubjectId=1"];

NSStringEncoding htmlEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
//此網頁編碼為gb2312,使用gb18030解碼
//<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

NSString *htmlString = [NSString stringWithData:[NSData datatWithContentsOfUrl:htmlUrl] encoding:htmlEncoding];
//將網頁源碼以gb18030解碼

NSData *htmlData = [htmlString dataUsingEncoding:NSUTF8StringEncoding];
//將網頁源碼以UTF-8編碼成NSData


TFHpple *htmlHpple = [TFHpple hppleWithHTMLData:htmlData];
//使用TFHpple解析網頁

NSArray *arrayTitle = [htmlHpple searchWithXPathQuery:@"//div[@class  = 'theme']/h3/a"];
NSArray *arrayContent = [htmlHpple searchWithXPathQuery:@"//div[@class  = 'theme']/p"];
//此陣列為篩選結果
//TFHpple使用XPath來篩選,XPath介紹(W3C):http://www.w3school.com.cn/xpath/index.asp

for(int i = 0; i < [arrayTitle count]; i++) {
	NSString *title = [[arrayTitle objectAtIndex:i] content];
	NSString *content = [[arrayContent objectAtIndex:i] content];
	
	//此處title, content即為所求。
}




原文里好像没这个链接哦:----
0
KSHime
KSHime
複製到OSChina上面的時候貌似出了點錯誤...
不知道為什麼多了點東西...以下為正確的:

NSArray *arrayTitle = [htmlHpple searchWithXPathQuery:@"//div[@class= 'theme']/h3/a"];
NSArray *arrayContent = [htmlHpple searchWithXPathQuery:@"//div[@class= 'theme']/p"];



返回顶部
顶部