1

我想从网页中提取正文段落并将它们存储到字符串中。

首先,我使用

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:@""

有没有更好的方法来实现我的目标?

4

2 回答 2

0

获取子字符串去掉START & END后,可以简单的使用NSString+HTML分类来转义html标签,是实现html编码、解码等非常好的分类,主要是你可以在你的NSString实例中使用它无需为此目的创建单独的对象。

Objective C HTML escape/unescape在这里你可以找到更多关于它的讨论。

这些是该帖子中建议的可用方法,我喜欢它。

- (NSString *)stringByConvertingHTMLToPlainText;
- (NSString *)stringByDecodingHTMLEntities;
- (NSString *)stringByEncodingHTMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;
于 2012-10-17T07:13:43.827 回答
0

在删除 HTML 标签之前,您必须先找到它们。除非您知道该系统需要使用的标签数量有限,否则您不应该在代码中硬编码它们的列表。使用 -stringByReplacingOccurrences...,您需要一个精确的字符串,以及所有参数 ID 和类标签等,这使得它更容易发生变化。

除非您打算使用 vishy 建议的第三方扩展,它看起来可以满足您的需求,否则您将不得不执行以下操作:

1) 查找字符串中第一次出现的“<”

2)查看“<”是否被转义。

3)如果没有,找到下一个“>”。

4)看看是否逃脱了。

5)如果没有,为标签创建一个 NSRange(从“<”到“>”)并使用 -stringByReplacingCharactersInRange 摆脱它。

6) 重复直到找不到任何未转义的“<”。

这将为您留下去 HTML 化的文本,但不是纯文本。您仍然会看到 HTML 转义,同样重要的是,不能保证一旦 HTML 被删除,空格(在 HTML 中被忽略)将有意义。

于 2012-10-17T20:56:24.913 回答