Conversion de text HTML en text brut en utilisant Objective-C

J'ai un énorme NSSsortingng avec du text HTML à l'intérieur. La longueur de cette string est plus de 3.500.000 caractères. Comment puis-je convertir ce text HTML en NSSsortingng avec du text brut à l'intérieur. J'utilisais un scanner, mais ça marche trop lentement. Une idée ?

Cela dépend de la version iOS que vous ciblez. Depuis iOS7, il existe une méthode embeddede qui va non seulement dépouiller les balises HTML, mais aussi mettre la mise en forme de la string:

Objectif c

 [[NSAtsortingbutedSsortingng alloc] initWithData:[htmlSsortingng dataUsingEncoding:NSUTF8SsortingngEncoding] options:@{NSDocumentTypeDocumentAtsortingbute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAtsortingbute: [NSNumber numberWithInt:NSUTF8SsortingngEncoding]} documentAtsortingbutes:nil error:nil]; 

Rapide

 let atsortingbutedSsortingng = try NSAtsortingbutedSsortingng(data: htmlSsortingng.dataUsingEncoding(NSUTF8SsortingngEncoding)!, options: [NSDocumentTypeDocumentAtsortingbute: NSHTMLTextDocumentType], documentAtsortingbutes: nil) 

Si vous avez juste besoin de tout supprimer entre < et > (façon sale !!!), ce qui peut être problématique si vous avez ces caractères dans la string, utilisez ceci:

 - (NSSsortingng *)ssortingngBySsortingppingHTML { NSRange r; NSSsortingng *s = [[self copy] autorelease]; while ((r = [s rangeOfSsortingng:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound) s = [s ssortingngByReplacingCharactersInRange:r withSsortingng:@""]; return s; } 

Je résous ma question avec scanner, mais je ne l'utilise pas pour tout le text. Je l'utilise pour chaque partie de text de 10.000, avant de concaténer toutes les parties set. Mon code ci-dessous

 -(NSSsortingng *)convertHTML:(NSSsortingng *)html { NSScanner *myScanner; NSSsortingng *text = nil; myScanner = [NSScanner scannerWithSsortingng:html]; while ([myScanner isAtEnd] == NO) { [myScanner scanUpToSsortingng:@"<" intoSsortingng:NULL] ; [myScanner scanUpToSsortingng:@">" intoSsortingng:&text] ; html = [html ssortingngByReplacingOccurrencesOfSsortingng:[NSSsortingng ssortingngWithFormat:@"%@>", text] withSsortingng:@""]; } // html = [html ssortingngByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; return html; } 

Pour la langue Swift,

 NSAtsortingbutedSsortingng(data:(htmlSsortingng as! Ssortingng).dataUsingEncoding(NSUTF8SsortingngEncoding, allowLossyConversion: true )!, options:[NSDocumentTypeDocumentAtsortingbute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAtsortingbute: NSNumber(unsignedLong: NSUTF8SsortingngEncoding)], documentAtsortingbutes: nil, error: nil)! 
 - (NSSsortingng *)ssortingngBySsortingppingHTML:(NSSsortingng *)inputSsortingng { NSMutableSsortingng *outSsortingng; if (inputSsortingng) { outSsortingng = [[NSMutableSsortingng alloc] initWithSsortingng:inputSsortingng]; if ([inputSsortingng length] > 0) { NSRange r; while ((r = [outSsortingng rangeOfSsortingng:@"<[^>]+>|&nbsp;" options:NSRegularExpressionSearch]).location != NSNotFound) { [outSsortingng deleteCharactersInRange:r]; } } } return outSsortingng; } 

Avez-vous essayé quelque chose comme ça ci-dessous, Je ne sais pas si ce sera plus rapide comme vous l'avez fait avant d'utiliser le scanner s'il vous plaît vérifier: –

 //Ssortingng which contains html tags NSSsortingng *htmlSsortingng=[NSSsortingng ssortingngWithFormat:@"%@",@"<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>"]; NSMutableSsortingng *mutStr=[NSMutableSsortingng ssortingng]; NSSsortingng *s = nil; //Removing html elements tags NSArray *arra=[htmlSsortingng componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInSsortingng:@"</>"]]; NSLog(@"%@",arra); for (s in arra) { [mutStr appendSsortingng:@" "]; [mutStr appendSsortingng:s]; } NSLog(@"%@",mutStr);//Printing the output