iOS NSString在保留段落标签的同时展平Html

时间:2013-10-30 04:26:31

标签: ios iphone objective-c nsstring

我有一个NSString,其中包含我从Web服务检索的一些html。我需要做的是从它删除html链接,以便我可以将其显示为纯文本。

我看到了一些与展平html HEREHEREHERE相关的问题。

不幸的是,所有这些方法的共同之处在于它们从中删除了所有html,包括段落标记,所有文本最终显示为单个单元。

我想要的是一个只从中删除html链接并保留段落标记的方法。我怎样才能实现这一目标?谢谢!

3 个答案:

答案 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;
}

希望这有帮助!