在对接一个论坛的数据(bbs),下发下来的数据是html代码的,比如里面有字体的大小、引用某人的发言、图片等等等等。 2.自己提取html代码里面需要的信息,现在能想到的是 文字(包括引用别人的发言)+图片,也遇到了问题1>怎么样确保提取的信息是正确的(有没有什么规则呢)。2>比如bbs里面的引用(盖楼)我应该用什么用的控件去实现呢? 问题已经困扰我好几天了,希望大家能够给我提点宝贵的意见,谢谢~~~~ |
|
用第2种方式,你抓一个完整的 html 给我,我先看看,这种东西都是需要定制的
|
|
“body”: “<fieldset><legend> 引用: 芳山 </legend><br /><fieldset><legend> 引用: zstc2005 </legend><br />2015.02.18的<br />\r\n<br />\r\n拌海蜇、拌皮蛋、拌菠菜、炒三冬、大蒜肉皮炒肚片、老燒魚塊,吃飯。<br />\r\n<br />\r\n</fieldset><br /><br />\r\n<br />\r\n大年30不杀鸡吗?</fieldset><br /><br />\r\n我們這的習俗是年菜一定要有一條魚或者魚的一部分,寓意<b>連年有餘</b>。”
|
|
“body”: “從此再無週六工作表,心裏想想還是有點悲傷。<br />\r\n 可不能不走出來,生活還是要繼續的。<br />\r\n 賣的一瓶番茄醬快到期了,那就拿出來自己吃。<br />\r\n 今天早上我倒了點蘸白饅頭,中午老媽炒個雞蛋。<br />\r\n 老爸買的牛肉是鹽水牛肉和醬牛肉都有,隨便往粉絲湯裏面加哪種。<br />\r\n 炒菜薹、炒茼蒿、番茄炒蛋、牛肉粉絲湯,吃飯。<br />\r\n<br />\r\n<img id=”attach152767″ alt=”CIMG0001.JPG” src=”attachments/201503/20150314111250ba01a90c72da292015cd81f2949baf43.jpg.thumb.jpg” onclick=”Previewurl(“”attachments/201503/20150314111250ba01a90c72da292015cd81f2949baf43.jpg””)” onmouseover=”domTT_activate(this, event, “”content””, “”<strong>大小</strong>: 1.44 MB<br /><span title="2015-03-14 11:12:51">1月2天前</span>””, “”styleClass””, “”attach””, “”x””, findPosition(this)[0], “”y””, findPosition(this)[1]-58);” /><br />\r\n<br />\r\n<img id=”attach152768″ alt=”CIMG0002.JPG” src=”attachments/201503/201503141113402719292e89009c4ad366d6d0ba6071ea.jpg.thumb.jpg” onclick=”Previewurl(“”attachments/201503/201503141113402719292e89009c4ad366d6d0ba6071ea.jpg””)” onmouseover=”domTT_activate(this, event, “”content””, “”<strong>大小</strong>: 1.18 MB<br /><span title="2015-03-14 11:13:41">1月2天前</span>””, “”styleClass””, “”attach””, “”x””, findPosition(this)[0], “”y””, findPosition(this)[1]-58);” /><br />\r\n<br />\r\n<img id=”attach152769″ alt=”CIMG0003.JPG” src=”attachments/201503/2015031411172720e89bda2c12dde554048772da345bf3.jpg.thumb.jpg” onclick=”Previewurl(“”attachments/201503/2015031411172720e89bda2c12dde554048772da345bf3.jpg””)” onmouseover=”domTT_activate(this, event, “”content””, “”<strong>大小</strong>: 1.25 MB<br /><span title="2015-03-14 11:17:28">1月2天前</span>””, “”styleClass””, “”attach””, “”x””, findPosition(this)[0], “”y””, findPosition(this)[1]-58);” /><br />\r\n<br />\r\n<img id=”attach152770″ alt=”CIMG0004.JPG” src=”attachments/201503/20150314111900e7e785a8b58bbc92aec955ccb6a61761.jpg.thumb.jpg” onclick=”Previewurl(“”attachments/201503/20150314111900e7e785a8b58bbc92aec955ccb6a61761.jpg””)” onmouseover=”domTT_activate(this, event, “”content””, “”<strong>大小</strong>: 1.04 MB<br /><span title="2015-03-14 11:19:01">1月2天前</span>””, “”styleClass””, “”attach””, “”x””, findPosition(this)[0], “”y””, findPosition(this)[1]-58);” /><br />\r\n<br />\r\n<img id=”attach152771″ alt=”CIMG0005.JPG” src=”attachments/201503/20150314111955981b997580efb9634dab597e7116ca44.jpg.thumb.jpg” onclick=”Previewurl(“”attachments/201503/20150314111955981b997580efb9634dab597e7116ca44.jpg””)” onmouseover=”domTT_activate(this, event, “”content””, “”<strong>大小</strong>: 1.32 MB<br /><span title="2015-03-14 11:19:56">1月2天前</span>””, “”styleClass””, “”attach””, “”x””, findPosition(this)[0], “”y””, findPosition(this)[1]-58);” />”
|
|
– (void)webViewDidFinishLoad:(UIWebView *)webView{
[reload tableView]; //这个时候重新刷新tableView 此时又会重新加载webview 你要判断下就不能在[reload tableView]了 至于怎么判断 就是你的程序而定了; } 第二个问题没懂 |
|
150分 |
我用正则解析出来了,先给你看看效果:
目前只解析了 fieldset 标签,没有解析 legend ,不过从结果上来看层次已经出来了。 我的做法: 测试数据,一个3层的跟帖: NSString *data = @"<fieldset><legend> 引用: 芳山 </legend><br /><fieldset><legend> 引用: zstc2005 </legend><br />2015.02.18的<br />\r\n<br />\r\n拌海蜇、拌皮蛋、拌菠菜、炒三冬、大蒜肉皮炒肚片、老燒魚塊,吃飯。<br />\r\n<br />\r\n</fieldset><br /><br />\r\n<br />\r\n大年30不杀鸡吗?</fieldset><br /><br />\r\n我們這的習俗是年菜一定要有一條魚或者魚的一部分,寓意<b>連年有餘</b>。"; Floor *floor = [Floor floorWithData:data]; NSLog(@"%@", floor); 用于封闭跟帖的实体对象,Floor: @interface Floor : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *content; @property (nonatomic, strong) Floor *replyFloor; @property (nonatomic, copy) NSString *rawData; + (Floor *)floorWithData:(NSString *)rawData; @end @implementation Floor + (Floor *)floorWithData:(NSString *)rawData { static NSString *fieldset = @"<fieldset>"; static NSString *fieldsetEnded = @"</fieldset>"; Floor *floor = [Floor new]; floor.rawData = rawData; NSArray *fieldsetRanges = matchesInRegex(fieldset, floor.rawData); NSArray *fieldsetEndedRanges = matchesInRegex(fieldsetEnded, floor.rawData); if (fieldsetRanges.count != fieldsetEndedRanges.count) { NSLog(@"格式不正确"); return nil; } NSString *content = floor.rawData; if (fieldsetRanges.count + fieldsetEndedRanges.count > 0) { NSRange replyStartRange = NSRangeFromString(fieldsetRanges.firstObject); NSRange replyEndedRange = NSRangeFromString(fieldsetEndedRanges.lastObject); NSString *replyString = [floor.rawData substringWithRange:NSMakeRange(replyStartRange.location, replyEndedRange.location + replyEndedRange.length - replyStartRange.location)]; content = [floor.rawData stringByReplacingOccurrencesOfString:replyString withString:@""]; NSString *replyRawData = [replyString substringWithRange:NSMakeRange(fieldset.length, replyString.length - fieldset.length - fieldsetEnded.length)]; floor.replyFloor = [Floor floorWithData:replyRawData]; } floor.content = content; return floor; } @end 工具方法: NSArray *matchesInRegex(NSString *pattern, NSString *rawData) { NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; NSArray *matches = [regex matchesInString:rawData options:0 range:NSMakeRange(0, rawData.length)]; NSMutableArray *matchRanges = [NSMutableArray arrayWithCapacity:matches.count]; for (NSTextCheckingResult *match in matches) { [matchRanges addObject:NSStringFromRange(match.range)]; } return matchRanges; } 核心在于标签的配对,逻辑并不算复杂,解析一层后,其他的靠递归就行了,剩下的功能你先自己实现下,我只能抛砖引玉,如果你遇到什么问题再来讨论。 |
你好,经过昨天的研究,可以用正则表达式提取我想要的内容
现在还剩下一个问题,就是 “引用,盖楼“ 我应该用什么控件来做,或者说有什么思路自己来画的么? |