【发布时间】:2014-06-23 04:06:19
【问题描述】:
我正在使用它的 API 为我的团队项目制作一个原生 iOS 应用程序。 API有三个主要方法:获取用户的个人资料信息、他的日记和证书表。最后一个方法返回给我 JSON 数据和表格的 HTML 代码。看起来是这样的
{"html":"<table class=\"table term-marks\" cellspacing=\"0\" cellspadding=\"0\"> <thead> <tr> <td>\u041f\u0440\u0435\u0434\u043c\u0435\u0442<\/td> <td colspan=\"10\">\u041e\u0446\u0435\u043d\u043a\u0438<\/td><td width=\"60px\">\u0421\u0440\u0435\u0434\u043d\u0438\u0439 <br\/>\u0431\u0430\u043b\u043b<\/td> <td width=\"60px\">\u0421\u0440\u0435\u0434\u043d\u0438\u0439 <br\/>\u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0443<\/td> <td width=\"60px\">\u0421\u0440\u0435\u0434\u043d\u0438\u0439 <br\/>\u043f\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438<\/td><td width=\"60px\">\u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430<\/td> <\/tr> <\/thead> <tbody> <tr> <td>\u0410\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439<\/td> <td>5<\/td> <td>5<\/td> <td>5<\/td> <td>4<\/td> <td>4<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>4.60<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0411\u0438\u043e\u043b\u043e\u0433\u0438\u044f<\/td> <td>3<\/td> <td>5<\/td> <td>5<\/td> <td>5<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>4.50<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u044f<\/td> <td>5<\/td> <td>4<\/td> <td>3<\/td> <td>2<\/td> <td>3<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>3.40<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0430 \u0438 \u0418\u041a\u0422<\/td> <td>5<\/td> <td>5<\/td> <td>4<\/td> <td>5<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>4.75<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0418\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0418\u0441\u0442\u043e\u0440\u0438\u044f<\/td> <td>5<\/td> <td>2<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>3.50<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u041b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0430<\/td> <td>4<\/td> <td>4<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>4.00<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430<\/td> <td>4<\/td> <td>5<\/td> <td>3<\/td> <td>5<\/td> <td>4<\/td> <td>4<\/td> <td>5<\/td> <td>2<\/td> <td>3<\/td> <td>5<\/td> <td>4.00<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u041e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u0437\u043d\u0430\u043d\u0438\u0435<\/td> <td>4<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>4.00<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a<\/td> <td>5<\/td> <td>5<\/td> <td>4<\/td> <td>5<\/td> <td>5<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>4.80<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0422\u0430\u0442\u0430\u0440\u0441\u043a\u0430\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u0430<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0422\u0430\u0442\u0430\u0440\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a<\/td> <td>4<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>4.00<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0424\u0438\u0437\u0438\u043a\u0430<\/td> <td>3<\/td> <td>4<\/td> <td>5<\/td> <td>4<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>4.00<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0430<\/td> <td>5<\/td> <td>4<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>4.50<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr> <td>\u0425\u0438\u043c\u0438\u044f<\/td> <td>4<\/td> <td>5<\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td><\/td> <td>4.50<\/td><td><\/td> <td><\/td> <td><\/td> <\/tr> <tr><td colspan=\"11\"><strong>\u0418\u0422\u041e\u0413\u041e<\/strong><\/td><td>3.88<\/td> <td>0<\/td> <td>0<\/td> <td>-<\/td><\/tr> <\/tbody> <\/table>"}
我试图用这个 JSON 数据创建一个 NSDictionary 并像这样从那里获取 NSData:
NSData *htmlData = [[NSData alloc] init];
NSDictionary *jsonDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:nil]; // responseData contains API response
htmlData = [jsonDictionary objectForKey:@"html"];
TFHpple *parser = [TFHpple hppleWithHTMLData:htmlData];
NSArray *tableRows = [mainParser searchWithXPathQuery:@"//tr/td"]
但我遇到了与here 相同的错误。但我不能使用那里的解决方案,因为我没有表格的 URL,我只有它的 html 代码。如何解析?
【问题讨论】:
-
不需要alloc/init htmlData;你只是在那里浪费CPU。当然,这不是你的问题。
-
@HermannKlecker 感谢您的建议!我只有 16 岁,我是 Obj-C 编程的初学者 :) 现在将尝试您的解决方案。
-
欢迎来到编程世界:)
标签: ios objective-c html-parsing tfhpple