使用Objective-C将HTML文本转换为纯文本

我有巨大的NSString与HTML文本里面。 该string的长度超过3.500.000个字符。 我怎样才能将这个HTML文本转换为纯文本内的NSString 。 我正在使用扫描仪,但工作速度太慢。 任何想法 ?

这取决于你的iOS版本的目标。 由于iOS7有一个内置的方法,不仅可以剥离HTML标签,而且可以将格式设置为string:

Objective-C的

 [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:nil error:nil]; 

迅速

 let attributedString = try NSAttributedString(data: htmlString.dataUsingEncoding(NSUTF8StringEncoding)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) 

如果你只需要删除<> (dirty way !!!)之间的所有内容,如果你在string中有这些字符,这可能会有问题,使用这个:

 - (NSString *)stringByStrippingHTML { NSRange r; NSString *s = [[self copy] autorelease]; while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound) s = [s stringByReplacingCharactersInRange:r withString:@""]; return s; } 

我用扫描仪解决了我的问题,但是我并没有把它用于所有的文本。 我将它用于每个10.000文本部分,然后将所有部分拼接在一起。 我的代码如下

 -(NSString *)convertHTML:(NSString *)html { NSScanner *myScanner; NSString *text = nil; myScanner = [NSScanner scannerWithString:html]; while ([myScanner isAtEnd] == NO) { [myScanner scanUpToString:@"<" intoString:NULL] ; [myScanner scanUpToString:@">" intoString:&text] ; html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>", text] withString:@""]; } // html = [html stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; return html; } 

对于Swift语言,

 NSAttributedString(data:(htmlString as! String).dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true )!, options:[NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSNumber(unsignedLong: NSUTF8StringEncoding)], documentAttributes: nil, error: nil)! 
 - (NSString *)stringByStrippingHTML:(NSString *)inputString { NSMutableString *outString; if (inputString) { outString = [[NSMutableString alloc] initWithString:inputString]; if ([inputString length] > 0) { NSRange r; while ((r = [outString rangeOfString:@"<[^>]+>|&nbsp;" options:NSRegularExpressionSearch]).location != NSNotFound) { [outString deleteCharactersInRange:r]; } } } return outString; } 

你有没有尝试下面这样的东西,不知道它是否会像使用扫描仪之前那样快,请检查: –

 //String which contains html tags NSString *htmlString=[NSString stringWithFormat:@"%@",@"<b>right</b> onto <b>Kennington Park Rd/A3</b>Continue to follow A3</div><div >Entering toll zone in 1.7&nbsp;km at Newington Causeway/A3</div><divGo through 2 roundabouts</div>"]; NSMutableString *mutStr=[NSMutableString string]; NSString *s = nil; //Removing html elements tags NSArray *arra=[htmlString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"</>"]]; NSLog(@"%@",arra); for (s in arra) { [mutStr appendString:@" "]; [mutStr appendString:s]; } NSLog(@"%@",mutStr);//Printing the output