我有一个NSString,其中包含我从Web服务检索的一些html。我需要做的是从它删除html链接,以便我可以将其显示为纯文本。
我看到了一些与展平html HERE,HERE和HERE相关的问题。
不幸的是,所有这些方法的共同之处在于它们从中删除了所有html,包括段落标记,所有文本最终显示为单个单元。
我想要的是一个只从中删除html链接并保留段落标记的方法。我怎样才能实现这一目标?谢谢!
答案 0 :(得分:5)
还有另一种方法,适用于iOS 7及更高版本:
NSAttributedString* attributedText = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding]
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
documentAttributes:nil
error:nil];
NSString* plainText = [attributedText string];
答案 1 :(得分:1)
您可以使用GTMNSString-HTML。只需从here
下载将其导入您的项目。现在使用以下方法展平HTML
- (NSString *)stringByConvertingHTMLToPlainText
如果你想保持段落标签在上面的方法中修改 dontReplaceTagWithSpace
dontReplaceTagWithSpace = ([tagName isEqualToString:@"p"] || OTHER TAG CHECKINGS....);
答案 2 :(得分:0)
我解决了自己的问题而无需做出很多改变。我从THIS QUESTION采用了flattenHtml方法并进行了一次修改以保留段落标记。而不是仅使用“<”,我使用“
- (NSString *)flattenHTML:(NSString *)html {
NSScanner *theScanner;
NSString *text = nil;
theScanner = [NSScanner scannerWithString:html];
while ([theScanner isAtEnd] == NO) {
[theScanner scanUpToString:@"<a" intoString:NULL] ;
[theScanner scanUpToString:@">" intoString:&text] ;
html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>", text] withString:@""];
}
//
html = [html stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
return html;
}
希望这有帮助!