我想从web page中提取正文段落并将它们存储到字符串中。
首先,我使用
获取整个源代码NSString *sourceCode = [NSString stringWithContentsOfURL:[NSURL URLWithString:currentLink] encoding:NSUTF8StringEncoding error:&error];
正文段落在<!-- (START) Pagination Content Wrapper -->
之后开始,在<!-- (END) Pagination Content Wrapper -->
之前结束
所以我打算像这样拆分字符串
NSString *startingPt = @"<!-- (START) Pagination Content Wrapper -->";
NSString *endingPt = @"<!-- (END) Pagination Content Wrapper -->";
NSString *sub = [sourceCode substringFromIndex:NSMaxRange([str rangeOfString:startingPt])];
sub = [sourceCode substringToIndex:[s rangeOfString:endingPt].location;
然后我会使用stringByReplacingOccurrencesOfString:withString:
将剩余的html标记替换为@""
有没有更好的方法来实现我的目标?
答案 0 :(得分:0)
获得子串后删除START&amp; END,您可以简单地使用NSString+HTML categories来转义html标签,它是一个非常好的类别来实现html编码,解码等等,主要是你可以将它用于你的NSString实例,无需创建单独的对象为此目的。
Objective C HTML escape/unescape您可以在这里找到更多有关它的讨论。
这些是可用的方法,如该帖子&amp;我喜欢它。
- (NSString *)stringByConvertingHTMLToPlainText;
- (NSString *)stringByDecodingHTMLEntities;
- (NSString *)stringByEncodingHTMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;
答案 1 :(得分:0)
在删除之前,您必须找到HTML标记。除非您知道该系统需要使用的标签数量有限,否则您不应在代码中对其列表进行硬编码。使用-stringByReplacingOccurrences ...,您需要一个精确的字符串,包含所有参数ID和类标记等,这使得它更容易发生变化。
除非您打算使用vishy建议的第三方扩展程序,看起来它可以满足您的需求,否则您将不得不这样做:
1)找到第一次出现的“&lt;”在字符串中
2)看看“&lt;”逃脱了。
3)如果没有,请找到下一个“&gt;”。
4)查看是否已转义。
5)如果没有,为标签创建一个NSRange(从“&lt;”到“&gt;”)并使用-stringByReplacingCharactersInRange去除它。
6)重复,直到找不到更多未转义的“&lt;”。
这将为您留下去HTML文本,但不是纯文本。您仍将看到HTML转义,同样重要的是,无法保证在删除HTML后,空白(在HTML中被忽略)会有任何意义。